n=10**6 isprime=[True]*(n+1) #isprime[i]はiが素数かどうか isprime[0]=False isprime[1]=False for p in range(2,n+1): if isprime[p]: for q in range(2*p,n+1,p): isprime[q]=False P=[i for i in range(10**6) if isprime[i]] def extgcd(a,b): if b: d,y,x=extgcd(b,a%b) y-=(a//b)*x return d,x,y return a,1,0 def modinv(a,mod): return extgcd(a,mod)[1] N,K=map(int,input().split()) mod=10**9+7 divs=[] for p in P: exp=0 while N%p==0: exp+=1 N//=p if exp: divs.append(exp) if N>1: divs.append(1) ans=1 for div in divs: res=0 for n in range(div+1): c=1 for i in range(1,n+1): c=c*(n+K-i)%mod*modinv(i,mod)%mod # print(n,c) res+=c res%=mod ans=ans*res%mod print(ans)