#include<iostream>
#include <stdio.h>
#include<string>
#include <math.h>
#include <stdlib.h>
unsigned long long int call(unsigned long long int a,unsigned long long int b)
{
unsigned long long int res;
if(b==0)
return 1;
if(b==1)
return a;
res=call(a,b/2);
res=(res*res)%1000000007;
if(b%2)
res=(res*a)%1000000007;
return res;
}
int main() {
unsigned long long int a,b,r;
int t,i=0;
std::string A,B;
scanf("%d",&t);
getchar();
while(t--)
{
std::cin>>A>>B;
i=0;
a=0;
b=0;
while(A[i])
{
a=(a*10+(A[i]-'0'))%1000000007;
i++;
}
i=0;
while(B[i])
{
b=(b*10+(B[i]-'0'))%1000000007;
i++;
}
r=call(a,b);
printf("%llu\n",r);
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZTxzdHJpbmc+CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KdW5zaWduZWQgbG9uZyBsb25nIGludCBjYWxsKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgYSx1bnNpZ25lZCBsb25nIGxvbmcgaW50IGIpCnsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgcmVzOwogICAgaWYoYj09MCkKICAgICAgICByZXR1cm4gMTsKICAgIGlmKGI9PTEpCiAgICAgICAgcmV0dXJuIGE7CiAgICByZXM9Y2FsbChhLGIvMik7CiAgICByZXM9KHJlcypyZXMpJTEwMDAwMDAwMDc7CiAgICBpZihiJTIpCiAgICByZXM9KHJlcyphKSUxMDAwMDAwMDA3OwogICAgcmV0dXJuIHJlczsKfQppbnQgbWFpbigpIHsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgYSxiLHI7CiAgICBpbnQgdCxpPTA7CiAgICBzdGQ6OnN0cmluZyBBLEI7CiAgICBzY2FuZigiJWQiLCZ0KTsKICAgIGdldGNoYXIoKTsKICAgIHdoaWxlKHQtLSkKICAgIHsKICAgICAgICBzdGQ6OmNpbj4+QT4+QjsKICAgICAgICBpPTA7CiAgICAgICAgYT0wOwogICAgICAgIGI9MDsKICAgICAgICB3aGlsZShBW2ldKQogICAgICAgIHsKICAgICAgICAgICAgYT0oYSoxMCsoQVtpXS0nMCcpKSUxMDAwMDAwMDA3OwogICAgICAgIGkrKzsKICAgICAgICB9CiAgICAgICAgaT0wOwogICAgICAgIHdoaWxlKEJbaV0pCiAgICAgICAgewogICAgICAgICAgICBiPShiKjEwKyhCW2ldLScwJykpJTEwMDAwMDAwMDc7CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICAgICAgcj1jYWxsKGEsYik7CiAgICAgICAgcHJpbnRmKCIlbGx1XG4iLHIpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K