import sys sys.setrecursionlimit(10**7) t=int(input()) cases=[list(map(int,input().split())) for _ in range(t)] mod=10**9+7 memo={} def ext_gcd(a, b): # a*x+b*y==gcd(a,b)たるgcd(a,b),x,y if (a,b) in memo:return memo[(a,b)] if b > 0: d,x,y = ext_gcd(b,a % b) memo[(a,b)]=d,y,x-(a//b)*y return d,y,x-(a//b)*y return a,1,0 for x,k in cases: # x=n^k (mod)となるnを求める。k:奇数 <=5*10**8 # x^i=n^(i*k) (mod) # ここでi*k%(mod-1)=1なら、フェルマーの小定理より # x^i=n (mod) # となる。 # i*k%(mod-1)=1となるiを探す。 # kの制約よりkとmod-1は互いに素 # ある(i,j)があり、i*k=j*(mod-1)+1 # i*k+j*(mod-1)=1 g,i,j=ext_gcd(k,mod-1) if i<0: x=pow(x,mod-2,mod) i=abs(i) print(pow(x,i,mod))