import sys from array import array def mul(a,b): return (a*b)%1000000007 mpf = array('I',[0])*20000005 primes = array('I') for i in range(2, len(mpf)): if mpf[i] == 0: mpf[i] = i primes.append(i) for p in primes: if p > mpf[i] or p * i >= len(mpf): break mpf[p * i] = p f = array('I',[0])*48000005 f[0] = 1 f[1] = 2 f[2] = 5 f[3] = 15 for n in range(4, len(f)): n1 = (n+3)//4 n2 = (n+2)//4 n3 = (n+1)//4 f[n] = f[n-1] + mul(n1+n2+n3,f[n-2]) + mul(n2*n2+n2*n3+n3*n3,f[n-3]) + mul(mul(n3,n3),mul(n3,f[n-4])) f[n] %= 1000000007 T = int(sys.stdin.readline()) for _ in range(T): A, B = map(int, sys.stdin.readline().split()) ans = 1 while A > 1: p = mpf[A] vp = 0 while mpf[A] == p: A //= p vp += 1 ans = mul(ans,f[B*vp]) print(ans)