#include using namespace std; #define rep(i, n) for(int i=0; i #include void func(vector &exp, vector &prime, ll M) { for (ll i = 2; i <= sqrt(M); i++) { if (M % i == 0) { prime.push_back(i); ll c = 0; while (M % i == 0) { M /= i; c++; } exp.push_back(c); } } if (M > 1) { prime.push_back(M); exp.push_back(1); } } ll power(ll p, ll a) { if (a == 0) { return 1LL; } if (a % 2 == 1) { return (p * power(p, a - 1)) % mod; } if (a % 2 == 0) { ll t = power(p, a / 2) % mod; return (t * t)%mod; } } int main() { ll N, M; cin >> N >> M; vector exp, prime; func(exp, prime, M); ll ans = 1; rep(i, prime.size()) { ans *= (mod + power(exp[i] + 1, N) - power(exp[i], N)) % mod; ans %= mod; } cout << ans << endl; }