#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
long long modpow(long long a, long long e){
long long r = 1;
while(e){
if(e&1) r = r*a % MOD;
a = a*a % MOD;
e >>= 1;
}
return r;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int q;
if(!(cin >> q)) return 0;
vector<pair<int,int>> qs(q);
int maxY = 0;
for(int i=0;i<q;i++){
int x,y; cin >> x >> y;
qs[i]={x,y};
maxY=max(maxY,y);
}
int N = 1000000;
vector<int> spf(N+1), primes;
for(int i=2;i<=N;i++){
if(!spf[i]){spf[i]=i; primes.push_back(i);}
for(int p:primes){
long long v=1LL*p*i;
if(v>N || p>spf[i]) break;
spf[v]=p;
}
}
int EXTRA = 25;
int M = maxY + EXTRA;
vector<long long> fac(M+1), invfac(M+1);
fac[0]=1;
for(int i=1;i<=M;i++) fac[i]=fac[i-1]*i%MOD;
auto modinv = [&](long long x){ return modpow(x, MOD-2); };
invfac[M]=modinv(fac[M]);
for(int i=M;i>=1;i--) invfac[i-1]=invfac[i]*i%MOD;
auto C = [&](int n,int r)->long long{
if(r<0 || r>n) return 0;
return fac[n]*invfac[r]%MOD*invfac[n-r]%MOD;
};
for(auto [x,y]: qs){
long long ans = modpow(2, y-1);
int t = x;
while(t>1){
int p = spf[t], c = 0;
while(t%p==0){ t/=p; c++; }
ans = ans * C(c + y - 1, c) % MOD;
}
cout << ans % MOD << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBNT0QgPSAxMDAwMDAwMDA3OwoKbG9uZyBsb25nIG1vZHBvdyhsb25nIGxvbmcgYSwgbG9uZyBsb25nIGUpewogICAgbG9uZyBsb25nIHIgPSAxOwogICAgd2hpbGUoZSl7CiAgICAgICAgaWYoZSYxKSByID0gciphICUgTU9EOwogICAgICAgIGEgPSBhKmEgJSBNT0Q7CiAgICAgICAgZSA+Pj0gMTsKICAgIH0KICAgIHJldHVybiByOwp9CgppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGludCBxOyAKICAgIGlmKCEoY2luID4+IHEpKSByZXR1cm4gMDsKICAgIHZlY3RvcjxwYWlyPGludCxpbnQ+PiBxcyhxKTsKICAgIGludCBtYXhZID0gMDsKICAgIGZvcihpbnQgaT0wO2k8cTtpKyspewogICAgICAgIGludCB4LHk7IGNpbiA+PiB4ID4+IHk7CiAgICAgICAgcXNbaV09e3gseX07CiAgICAgICAgbWF4WT1tYXgobWF4WSx5KTsKICAgIH0KICAgIGludCBOID0gMTAwMDAwMDsKICAgIHZlY3RvcjxpbnQ+IHNwZihOKzEpLCBwcmltZXM7CiAgICBmb3IoaW50IGk9MjtpPD1OO2krKyl7CiAgICAgICAgaWYoIXNwZltpXSl7c3BmW2ldPWk7IHByaW1lcy5wdXNoX2JhY2soaSk7fQogICAgICAgIGZvcihpbnQgcDpwcmltZXMpewogICAgICAgICAgICBsb25nIGxvbmcgdj0xTEwqcCppOwogICAgICAgICAgICBpZih2Pk4gfHwgcD5zcGZbaV0pIGJyZWFrOwogICAgICAgICAgICBzcGZbdl09cDsKICAgICAgICB9CiAgICB9CiAgICBpbnQgRVhUUkEgPSAyNTsKICAgIGludCBNID0gbWF4WSArIEVYVFJBOwogICAgdmVjdG9yPGxvbmcgbG9uZz4gZmFjKE0rMSksIGludmZhYyhNKzEpOwogICAgZmFjWzBdPTE7CiAgICBmb3IoaW50IGk9MTtpPD1NO2krKykgZmFjW2ldPWZhY1tpLTFdKmklTU9EOwogICAgYXV0byBtb2RpbnYgPSBbJl0obG9uZyBsb25nIHgpeyByZXR1cm4gbW9kcG93KHgsIE1PRC0yKTsgfTsKICAgIGludmZhY1tNXT1tb2RpbnYoZmFjW01dKTsKICAgIGZvcihpbnQgaT1NO2k+PTE7aS0tKSBpbnZmYWNbaS0xXT1pbnZmYWNbaV0qaSVNT0Q7CiAgICBhdXRvIEMgPSBbJl0oaW50IG4saW50IHIpLT5sb25nIGxvbmd7CiAgICAgICAgaWYocjwwIHx8IHI+bikgcmV0dXJuIDA7CiAgICAgICAgcmV0dXJuIGZhY1tuXSppbnZmYWNbcl0lTU9EKmludmZhY1tuLXJdJU1PRDsKICAgIH07CgogICAgZm9yKGF1dG8gW3gseV06IHFzKXsKICAgICAgICBsb25nIGxvbmcgYW5zID0gbW9kcG93KDIsIHktMSk7CiAgICAgICAgaW50IHQgPSB4OwogICAgICAgIHdoaWxlKHQ+MSl7CiAgICAgICAgICAgIGludCBwID0gc3BmW3RdLCBjID0gMDsKICAgICAgICAgICAgd2hpbGUodCVwPT0wKXsgdC89cDsgYysrOyB9CiAgICAgICAgICAgIGFucyA9IGFucyAqIEMoYyArIHkgLSAxLCBjKSAlIE1PRDsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBhbnMgJSBNT0QgPDwgIlxuIjsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==