#include using namespace std; const long long MOD = 1000000007; template T uPow(T z,T n, T mod){ T ans = 1; while(n != 0){ if(n%2){ ans*=z; if(mod)ans%=mod; } n >>= 1; z*=z; if(mod)z%=mod; } return ans; } int main(){ long long n,p;cin>>n>>p; long long nw = 1; long long nw2 = 1; for(long long i = 1; n >= i; i++){ nw = (nw*i)%(MOD-1); nw2 = (nw2*i)%(MOD); } long long r = uPow(nw2,nw,MOD); long long x = 0; for(long long i = p; n >= i; i+=p){ int nwi = i; while(nwi%p == 0){ nwi/=p; x++; } } cout << (x*r)%MOD << endl; }