/**
* winners never quit
**/
#include <bits/stdc++.h>
using namespace std;
const int N = 1e8;
long long mod = 1e9 + 7;
long long power(long long b, long long p){
if (p==0)return 1LL % mod;
if (p%2)return ((power(b, p-1)%mod) * (b%mod)) % mod;
long long m = power(b, p/2);
return ((m%mod)*(m%mod)) % mod;
}
vector <bool> mark(N+1, false);
vector <int> prime;
void sieve(){
prime.push_back(2);
for (long long i = 3;i <= N;i += 2){
if (mark[i])continue;
prime.push_back(i);
for (long long j = i*i;j <= N;j += i+i){
mark[j] = true;
}
}
}
vector <pair <long long, int> > pd;
void prime_div(long long n){
for (int i = 0;i < prime.size();i++){
long long temp = prime[i];
if (temp*temp > n)break;
if (n%temp==0){
int cnt = 0;
while (n%temp==0){
n /= temp;
cnt++;
}
pd.push_back({temp, cnt});
}
}
if (n > 1)pd.push_back({n, 1});
}
vector <long long> all_div;
void find_all(){
vector <long long> di;
for (int i = 0;i < pd.size();i++){
for (int j = 0;j < pd[i].second;j++){
di.push_back(pd[i].first);
}
}
int len = (1 << di.size());
map <long long, int> mp;
for (int i = 0;i < len;i++){
long long cur = 1;
for (int j = 0;j < di.size();j++){
if (i & (1<<j))cur *= di[j];
}
if (!mp[cur])all_div.push_back(cur);
mp[cur]++;
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int tc, ca = 0;
sieve();
cin >> tc;
while (tc--){
long long n, k;
cin >> n >> k;
prime_div(n);
find_all();
long long ans = 0;
for (int i = 0;i < all_div.size();i++){
ans = ((ans%mod) + power(all_div[i], k)) % mod;
}
cout << ans << '\n';
pd.clear();
all_div.clear();
}
return 0;
}
LyoqCiAqICB3aW5uZXJzIG5ldmVyIHF1aXQKKiovCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBOID0gMWU4OwoKbG9uZyBsb25nIG1vZCA9IDFlOSArIDc7Cgpsb25nIGxvbmcgcG93ZXIobG9uZyBsb25nIGIsIGxvbmcgbG9uZyBwKXsKICBpZiAocD09MClyZXR1cm4gMUxMICUgbW9kOwogIGlmIChwJTIpcmV0dXJuICgocG93ZXIoYiwgcC0xKSVtb2QpICogKGIlbW9kKSkgJSBtb2Q7CiAgbG9uZyBsb25nIG0gPSBwb3dlcihiLCBwLzIpOwogIHJldHVybiAoKG0lbW9kKSoobSVtb2QpKSAlIG1vZDsKfQoKdmVjdG9yIDxib29sPiBtYXJrKE4rMSwgZmFsc2UpOwp2ZWN0b3IgPGludD4gcHJpbWU7Cgp2b2lkIHNpZXZlKCl7CiAgcHJpbWUucHVzaF9iYWNrKDIpOwogIGZvciAobG9uZyBsb25nIGkgPSAzO2kgPD0gTjtpICs9IDIpewogICAgaWYgKG1hcmtbaV0pY29udGludWU7CiAgICBwcmltZS5wdXNoX2JhY2soaSk7CiAgICBmb3IgKGxvbmcgbG9uZyBqID0gaSppO2ogPD0gTjtqICs9IGkraSl7CiAgICAgIG1hcmtbal0gPSB0cnVlOwogICAgfQogIH0KfQoKdmVjdG9yIDxwYWlyIDxsb25nIGxvbmcsIGludD4gPiBwZDsKCnZvaWQgcHJpbWVfZGl2KGxvbmcgbG9uZyBuKXsKICBmb3IgKGludCBpID0gMDtpIDwgcHJpbWUuc2l6ZSgpO2krKyl7CiAgICBsb25nIGxvbmcgdGVtcCA9IHByaW1lW2ldOwogICAgaWYgKHRlbXAqdGVtcCA+IG4pYnJlYWs7CiAgICBpZiAobiV0ZW1wPT0wKXsKICAgICAgaW50IGNudCA9IDA7CiAgICAgIHdoaWxlIChuJXRlbXA9PTApewogICAgICAgIG4gLz0gdGVtcDsKICAgICAgICBjbnQrKzsKICAgICAgfQogICAgICBwZC5wdXNoX2JhY2soe3RlbXAsIGNudH0pOwogICAgfQogIH0KICBpZiAobiA+IDEpcGQucHVzaF9iYWNrKHtuLCAxfSk7Cn0KCnZlY3RvciA8bG9uZyBsb25nPiBhbGxfZGl2OwoKdm9pZCBmaW5kX2FsbCgpewogIHZlY3RvciA8bG9uZyBsb25nPiBkaTsKICBmb3IgKGludCBpID0gMDtpIDwgcGQuc2l6ZSgpO2krKyl7CiAgICBmb3IgKGludCBqID0gMDtqIDwgcGRbaV0uc2Vjb25kO2orKyl7CiAgICAgIGRpLnB1c2hfYmFjayhwZFtpXS5maXJzdCk7CiAgICB9CiAgfQogIGludCBsZW4gPSAoMSA8PCBkaS5zaXplKCkpOwogIG1hcCA8bG9uZyBsb25nLCBpbnQ+IG1wOwogIGZvciAoaW50IGkgPSAwO2kgPCBsZW47aSsrKXsKICAgIGxvbmcgbG9uZyBjdXIgPSAxOwogICAgZm9yIChpbnQgaiA9IDA7aiA8IGRpLnNpemUoKTtqKyspewogICAgICBpZiAoaSAmICgxPDxqKSljdXIgKj0gZGlbal07CiAgICB9CiAgICBpZiAoIW1wW2N1cl0pYWxsX2Rpdi5wdXNoX2JhY2soY3VyKTsKICAgIG1wW2N1cl0rKzsKICB9Cn0KCmludCBtYWluKCkKewogIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogIGNpbi50aWUoMCk7CiAgaW50IHRjLCBjYSA9IDA7CiAgc2lldmUoKTsKICBjaW4gPj4gdGM7CiAgd2hpbGUgKHRjLS0pewogICAgbG9uZyBsb25nIG4sIGs7CiAgICBjaW4gPj4gbiA+PiBrOwogICAgcHJpbWVfZGl2KG4pOwogICAgZmluZF9hbGwoKTsKICAgIGxvbmcgbG9uZyBhbnMgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7aSA8IGFsbF9kaXYuc2l6ZSgpO2krKyl7CiAgICAgIGFucyA9ICgoYW5zJW1vZCkgKyBwb3dlcihhbGxfZGl2W2ldLCBrKSkgJSBtb2Q7CiAgICB9CiAgICBjb3V0IDw8IGFucyA8PCAnXG4nOwogICAgcGQuY2xlYXIoKTsKICAgIGFsbF9kaXYuY2xlYXIoKTsKICB9CiAgcmV0dXJuIDA7Cn0=