#include #include #include #include #include #include #include #include #include #include #include #pragma comment(linker,"/STACK:102400000,102400000") using namespace std; int a[105]; int flag[100005],prime[100005],count1,vf[100005],vans[105],vn; void getprime(int n){ int i,j; memset(flag,0,sizeof(flag)); for(i=2;i<=n;i++){ if(flag[i]==0) prime[++count1]=i; for(j=1;j<=count1 && i*prime[j]<=n;j++){ flag[i*prime[j]]=1; if(i%prime[j]==0) break; } } } int main(){ int i,j,m,n,T,t; getprime(100000); scanf("%d",&T); while(T--){ memset(vf,0,sizeof(vf)); scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&a[i]); } vn=0; for(i=1;i<=n;i++){ t=a[i]; for(j=1;j<=count1 && prime[j]*prime[j]<=t;j++){ while(t%prime[j]==0){ t/=prime[j]; vf[j]++; } } if(t!=1){ vans[++vn]=t; } } int cnt=0; for(j=1;j<=count1;j++){ if(cnt==2) break; while(vf[j]){ vans[++vn]=prime[j]; vf[j]--; cnt++; if(cnt==2) break; } } sort(vans+1,vans+vn+1); if(vn<2) printf("-1\n"); else printf("%I64d\n",1LL*vans[1]*vans[2]); } return 0; }