#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==