## https://yukicoder.me/problems/no/1287 def ext_euclide(X, Y): """ 拡張ユークリッド互除法を実行する。 a * X + b * Y = 1 を満たすa, bを取得する X, Yの満たすべき前提として ・gcd(X, Y) = 1 ・X > Y ・X > 0, Y > 0 """ if Y == 1: return 0, 1 a, b = ext_euclide(Y, X % Y) return b, a - b * (X // Y) MOD = 10 ** 9 + 7 def solve(X, K): if X == 0: return 0 a, _ = ext_euclide(K, MOD - 1) return pow(X, a, MOD) def main(): T= int(input()) answers = [] for _ in range(T): X, K = map(int, input().split()) ans = solve(X, K) answers.append(ans) for ans in answers: print(ans) if __name__ == "__main__": main()