#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")