#include #include #include #include #include #include #include #include #include #include #include #include #define vll vector #define vvvl vector #define vvl vector> #define VV(a, b, c, d) vector >(a, vector(b, c)) #define VVV(a, b, c, d) vector(a, vvl(b, vll (c, d))); #define re(c, b) for(ll c=0;c0){ if(b%2) ret *= num; num = num * num; b /= 2; } }else{ while(b>0){ if(b%2) ret = (ret*num)%p; num = (num*num)%p; b /= 2; } } return ret; } int main(int argc, char const *argv[]) { ll n, m;std::cin >> n >> m; init(); ll ans = mpow(m, n, P); ll cnt = 0; for(ll i=m-1;i>=1;i--){ ll tmp = pp(comb(m, i), mpow(i, n, P)); if(cnt%2==0) ans = (ans - tmp + P)%P; else ans = (ans + tmp)%P; cnt++; } std::cout << ans << '\n'; return 0; }