MOD = 10**9+7 N,M = map(int,input().split()) A = list(range(M+1)) A[0]=A[1]=1 for i in range(2,M+1): A[i]=(i*A[i-1])%MOD B = [0]*(M+1) B[0]=B[1]=1 B[M] = pow(A[M],MOD-2,MOD) for i in range(M-1,1,-1): B[i] = (B[i+1]*(i+1))%MOD def comb(n,k): if k>n or k<0:return 0 if k==0 or k==n:return 1 return (A[n]*B[k]*B[n-k])%MOD ans = 0 for k in range(M): ans = (ans+(-1)**(k%2)*comb(M,k)*pow(M-k,N,MOD))%MOD print(ans)