nn = 100100 P = 10**9+7 fa = [1] * (nn+1) fainv = [1] * (nn+1) for i in range(nn): fa[i+1] = fa[i] * (i+1) % P fainv[-1] = pow(fa[-1], P-2, P) for i in range(nn)[::-1]: fainv[i] = fainv[i+1] * (i+1) % P inv = [1] * (nn+1) for i in range(1, nn)[::-1]: inv[i] = fainv[i] * fa[i-1] C = lambda a, b: fa[a] * fainv[b] % P * fainv[a-b] % P if 0 <= b <= a else 0 N, M = map(int, input().split()) def calc(i): return pow(i, N, P) * C(M, i) * (1 if (i ^ M) & 1 == 0 else -1) print(sum([calc(i) for i in range(1, M+1)]) % P)