#include #include using ll = long long; #define MOD 1000000007 #define Mod 998244353 const int MAX = 1000000005; const long long INF = 1000000000000000005LL; using namespace std; using namespace atcoder; ll modpow(ll a, ll n, ll m) { ll res = 1; while (n > 0) { if (n & 1) res = res * a % m; a = a * a % m; n >>= 1; } return res; } using mint = modint1000000007; int main() { ios::sync_with_stdio(0);cin.tie(); int N, P; cin >> N >> P; ll c = 0; for (int i = 1; i <= N; i++) { int n = i; while (n%P == 0) { c++; n /= P; } } vector fact1(N+1), fact2(N+1); fact1[0] = 1; fact2[0] = 1; for (int i = 1; i <= N; i++) { fact1[i] = fact1[i-1] * i % MOD; fact2[i] = fact2[i-1] * i % (MOD - 1); } mint ans = mint(fact1[N]).pow(fact2[N]) * mint(c); cout << ans.val() << endl; }