#include <cstdio>
typedef long long ll;
ll euler(ll n) //计算模数的欧拉函数
{
ll res = n,a = n;
for (int i = 2; i * i <= n; i++)
{
if( a % i == 0 )
{
res -= res / i;
while( a % i == 0 ) a /= i;
}
}
if( a > 1 ) res -= res / a;
return res;
}
ll q_pow(ll a,ll b,ll mod) //快速幂
{
ll ans = 1;
int flag = 0;
while( b )
{
if( b & 1 )
{
ans *= a;
if( ans > mod ) flag = 1;
ans %= mod;
}
a *= a;
if( a > mod ) flag = 1;
a %= mod;
b >>= 1;
}
return ans + flag * mod;
//不能简单的返回%mod的值,大于mod时要加mod(欧拉定理的约束)
}
ll cal(ll a,ll l,ll r,ll mod)
{
if( mod == 1 ) return 1; //模数为1时直接返回1回溯,因为后面等于多少到这一层%1都等于0
if( l == r ) //递归到最后,回溯
{
if( a > mod ) a = a % mod + mod;
return a;
}
ll b = cal(a,l+1,r,euler(mod)); //计算下一层的指数(注意模数变为当前值的欧拉值)
return q_pow(a,b,mod); //快速幂计算
}
int main()
{
int t;
scanf("%d",&t);
while( t-- )
{
ll a,b,c;
ll ans;
scanf("%lld%lld%lld",&a,&b,&c);
if( b == 0 ) ans = 1;
else if( b == 1 ) ans = a;
else ans = cal(a,1,b,c);
ans %= c;
printf("%lld\n",ans);
}
return 0;
}