#include using namespace std; using mint = atcoder::modint1000000007; int main(){ int n, m; cin >> n >> m; vector fact(m + 1), inv(m + 1); fact[0] = 1; for(int i = 1; i <= m; i++) fact[i] = i * fact[i - 1]; inv[m] = 1 / fact[m]; for(int i = m; i >= 1; i--) inv[i - 1] = i * inv[i]; mint ans; for(int i = 1; i <= m; i++){ if(m - i & 1) ans -= inv[m - i] * inv[i] * mint(i).pow(n); else ans += inv[m - i] * inv[i] * mint(i).pow(n); } cout << (ans * fact[m]).val() << '\n'; }