mod=1000000007 maxM=100010 fact=[0]*maxM fact[0]=1 for i in range(1,maxM): fact[i]=fact[i-1]*i%mod ifact=[0]*maxM for i in range(maxM): ifact[i]=pow(fact[i],mod-2,mod) def comb(n,k): if k<0 or k>n: return 0 return fact[n]*ifact[k]*ifact[n-k]%mod N,M=map(int,input().split()) ans=0 for i in range(M): if i%2==0: ans=(ans+comb(M,i)*pow(M-i,N,mod))%mod else : ans=(ans-comb(M,i)*pow(M-i,N,mod))%mod ans=(ans+mod)%mod print(ans)