#yuki_391 mod=10**9+7 n=10**5 fact=[0 for i in xrange(n+1)] inv=[0 for i in xrange(n+1)] factr=[0 for i in xrange(n+1)] inv[1]=fact[0]=factr[0]=1 for i in xrange(2,n+1): inv[i]=inv[mod%i]*(mod-mod/i)%mod for i in xrange(1,n+1): fact[i]=fact[i-1]*i%mod factr[i]=factr[i-1]*inv[i]%mod def comb(n,k): if k<0 or k>n: return 0 return factr[k]*fact[n]%mod*factr[n-k]%mod def perm(n,k): if k<0 or k>n: return 0 return fact[n]*factr[n-k]%mod def hcomb(n,k): if n==0 and k==0: return 1 return comb(n+k-1,k) n,m=map(int,raw_input().split()) res=0 for i in xrange(1,m+1): a=pow(i,n,mod)*comb(m,i)%mod if (m-i)%2==0: res+=a else: res-=a print (res%mod+mod)%mod