#include<iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
const int N=1000000010; 
bool vis[100010];
int prim[100010];
int cnt=0;
 
void get_prim(){
	for(int i=2;i<=sqrt(N);i++){
		if(!vis[i])prim[cnt++]=i;
		for(int j=0;j<cnt;j++){
			if(prim[j]*i>sqrt(N))break; 
			vis[i*prim[j]]=1;
			if(i%prim[j]==0)break;
		}
	}
//	for(int i=0;i<50;i++)cout<<prim[i]<<endl;
}







int main() {
    int n;
    cin >> n;
    get_prim();
    while (n--) {
        string s;
        cin >> s;
        long long num = 0;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] >= '0' && s[i] <= '9') {
                num = num * 10 + (s[i] - '0');

            }
        }
        //      cout << num << endl;
        int len = 0,maxx =0;
        while(1&&num)
        {
            while(num%prim[len]==0)
            {
                maxx = prim[len];
                num/=prim[len];
            }
            len++;
            if(len>=cnt)
            {
                break;
            }
        }
        if(num!=1)cout<<num<<endl;
        else if(num==1)cout<<maxx<<endl;
        else cout<<0<<endl;
    }
}
// 64 位输出请用 printf("%lld")