#include #include using namespace std; namespace mp = boost::multiprecision; int main(){ mp::cpp_int mod=1000000007; mp::cpp_int N,K; cin>>N>>K; vector prime(0); int upper=(int)sqrt(N)+1; for(int i=2;i<=upper;++i){ if(N%i==0){ prime.push_back(0); while(N%i==0){ N/=i; ++prime[prime.size()-1]; } } } if(N>1){ prime.push_back(1); } mp::cpp_int ans=1; for(int i:prime){ mp::cpp_int temp1=1,temp2=1; for(int j=1;j<=i;++j){ temp1=(temp1*(j+K))%mod; temp2=(temp2*j)%mod; } mp::cpp_int remain=mod-2; mp::cpp_int d=1; while(remain){ if(remain%2){ d=(d*temp2)%mod; } remain/=2; temp2=(temp2*temp2)%mod; } temp1=(temp1*d)%mod; ans=(ans*temp1)%mod; } cout<<((int)ans)<