#include #define ll long long #define INF 1000000005 #define MOD 1000000007 #define EPS 1e-10 #define rep(i,n) for(int i=0;i<(int)n;++i) #define each(a, b) for(auto (a): (b)) #define all(v) (v).begin(),(v).end() #define fi first #define se second #define pb push_back #define show(x) cout <<#x<<" = "<<(x)<P; const int MAX_N = 100005; ll inv[MAX_N],fac[MAX_N],finv[MAX_N]; void make() { fac[0] = fac[1] = 1; finv[0] = finv[1] = 1; inv[1] = 1; for(int i=2;i>= 1; } return res; } int main() { ll n; int m; cin >> n >> m; if(n < m){ cout <<"0\n"; return 0; } ll ans = 0; make(); rep(i,m){ ans = (ans + (ll)MOD*MOD + ((i%2)?-1:1)*comb(m,m-i)*mod_pow(m-i,n)) % MOD; } cout << ans << endl; return 0; }