/*
不定方程 x1+...+xy=c 的正整数解有C(y+c-1,y-1)个
质因子分解后每种因子都独立算贡献,再相乘
最后因为可以随意加偶数个-1,所以再乘2^y-1
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define N 2000006
ll F[N],invf[N],inv[N],p2[N];
int vis[N],prime[N],m;
void init(){
for(int i=2;i<N;i++){
if(!vis[i])
prime[++m]=i;
for(int j=1;j<=m;j++){
if(prime[j]*i>=N)break;
vis[prime[j]*i]=1;
if(i%prime[j])break;
}
}
}
int mm,p[500],c[500];
void divide(int x){
memset(c,0,sizeof c);
mm=0;
for(int i=1;prime[i]*prime[i]<=m;i++)
if(x%prime[i]==0){
p[++mm]=prime[i];
while(x%prime[i]==0)
x/=prime[i],c[mm]++;
}
if(x>1){
p[++mm]=x;
c[mm]=1;
}
}
inline ll C(ll a,ll b){
if(a<b)return 0;
return F[a]*invf[b]%mod*invf[a-b]%mod;
}
int x,y,q;
int main(){
init();
F[0]=1;invf[0]=1;inv[1]=1;p2[0]=1;
for(int i=2;i<=2000000;i++)inv[i]=(mod-mod/i)*inv[mod%i]%mod;
for(int i=1;i<=2000000;i++)F[i]=F[i-1]*i%mod;
for(int i=1;i<=2000000;i++)invf[i]=invf[i-1]*inv[i]%mod;
for(int i=1;i<=2000000;i++)p2[i]=p2[i-1]*2%mod;
cin>>q;
while(q--){
cin>>x>>y;
divide(x);
ll res=1;
for(int i=1;i<=mm;i++){
//因子p[i]的贡献
res=res*C(y+c[i]-1,y-1)%mod;
}
res=res*p2[y-1]%mod;
cout<<res<<'\n';
}
}