#include<bits/stdc++.h>
    #define lst long long
    #define ldb double
    #define N 10000050
    #define M 10000000
    using namespace std;
    const int Inf=1e9;
    int read()
    {
        int x=0,m=0;char ch=getchar();//快读 
        while(!isdigit(ch)){if(ch=='-')m=1;ch=getchar();}//isdigit判断输入的是否是十进制数字 读取符号,判断是否是负数 
        while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();//通过三个位运算来加速,相当于“x=10*x+'ch-0'” x<<3:2*2*2
        return m?-x:x;
    }
    int Q,tot;
    int phi[N],pri[N];
    void Prepare_Phi()
    {
        phi[1]=1;
        for(int i=2;i<=M;++i)
        {
            if(!phi[i])pri[++tot]=i,phi[i]=i-1;//(1) 欧拉质数乘积分解 
            for(int j=1;j<=tot;++j)
            {
                if(i*pri[j]>M)break;
                if(!(i%pri[j]))
                {
                    phi[i*pri[j]]=phi[i]*pri[j];//(2)
                    break;
                }else phi[i*pri[j]]=phi[i]*(pri[j]-1);//(3)
            }
        }
    }
    lst qpow(lst x,lst y,lst mod)
    {
        lst ret=1;
        while(y)//采用欧拉降幂和递归 由于幂数趋近于无穷,所以直接用降幂第三个公式。 
        {
            if(y%2==1)ret=ret*x%mod;//y&1等价于y%2==1; 
            x=x*x%mod; y/=2;//y<<=2等价于y/=2
        }return ret;
    }
    lst Solve(lst mod)
    {
        if(mod==1)return 0;
        return qpow(2,Solve(phi[mod])+phi[mod],mod);
    }
    int main()
    {
        Prepare_Phi();
        Q=read();
        while(Q--)
        {
            int p=read();
            printf("%lld\n",Solve(p));
        }
        return 0;
    }