#include using namespace std; #include using mint = atcoder::modint1000000007; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); vector mpf(20000005), primes; for(int i = 2;i < ssize(mpf);++i){ if (mpf[i] == 0){ mpf[i] = i; primes.push_back(i); } for (int p:primes){ if (p > mpf[i] || p*i >= ssize(mpf)) break; mpf[p*i] = p; } } vector f(48000005); f[0] = 1; f[1] = 2; f[2] = 5; f[3] = 15; for (int n = 4;n < ssize(f);++n){ mint n1 = (n+3)/4, n2 = (n+2)/4, n3 = (n+1)/4; f[n] = f[n-1] + (n1+n2+n3)*f[n-2] + (n2*n2+n2*n3+n3*n3)*f[n-3] + n3*n3*n3*f[n-4]; } int T; cin >> T; while(T--){ int A,B; cin >> A >> B; mint ans = 1; while (A > 1){ int p = mpf[A], vp = 0; while (mpf[A] == p){ A /= p; ++vp; } ans *= f[B*vp]; } cout << ans.val() << '\n'; } }