def prepare(n, MOD): # n! の計算 f = 1 for m in range(1, n + 1): f *= m f %= MOD fn = f # n!^-1 の計算 inv = pow(f, MOD - 2, MOD) # n!^-1 - 1!^-1 の計算 invs = [1] * (n + 1) invs[n] = inv for m in range(n, 1, -1): inv *= m inv %= MOD invs[m - 1] = inv return fn, invs def cmb(n,r,fn,invs,mod): return fn*invs[r]*invs[n-r]%mod n,m=map(int,input().split()) mod=10**9+7 fn,invs=prepare(m,mod) a=[0]*(m+1) for i in range(1,m+1): a[i]=(cmb(m,i,fn,invs,mod)*pow(i,n,mod)-a[i-1])%mod print(a[m])