#include #include #include #include using namespace std; using mint=atcoder::modint1000000007; using mint1=atcoder::static_modint<(int)1e9+6>; int lsp[1<<17]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); for(int i=2;i<1<<17;i++)if(lsp[i]==0) { for(int j=i;j<1<<17;j+=i)lsp[j]=i; } int N; long long K; cin>>N>>K; mapfac; while(N>1) { int p=lsp[N]; N/=p; fac[p]++; } mapnfac; while(K) { K--; nfac.clear(); bool fn=false; for(pairp:fac) { int u=p.first; if(u==2)nfac[3]+=p.second; else { u++; while(u%2==0)u/=2,nfac[2]+=p.second; while(u>1) { int v=lsp[u]; nfac[v]+=p.second; if(v>3)fn=true; u/=v; } } } fac.swap(nfac); if(!fn&&K%2==0)break; } if(K>0) { mint1 c=mint1::raw(2).pow(K/2); if(fac.find(2)!=fac.end())fac[2]*=c; if(fac.find(3)!=fac.end())fac[3]*=c; } mint ans=mint::raw(1); for(pairp:fac)ans*=mint::raw(p.first).pow(p.second.val()); cout<