import sys input = lambda :sys.stdin.readline()[:-1] ni = lambda :int(input()) na = lambda :list(map(int,input().split())) yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES") no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO") ####################################################################### k, n = na() mod = 10**9+7 n1 = n-1 n2 = max(n-2, 0) n3 = max(n-3, 0) g = n g1 = n-1 g11 = n-1 g12 = max(n-2, 0) g123 = max(n-3, 0) g112 = max(n-2, 0) g111 = n-1 #print(g, g1,g11,g12,g111,g112,g123) for i in range(k): h = n * g1 * g1 * g1 h1 = g11 * g11 * g1 + g12*g12*g1*n1 h11 = g111*g11*g11+g112*g12*g12*n1 h111 = g111**3 + n1 * g112**3 h12 = 2 * g11*g112*g12 + n2 * g123*g12**2 h112 = g111*g112*g112 + g112**3 + g112*g123*g123*n2 h123 = 3 * g112 * g112 * g123 + n3 * g123**3 g = h % mod g1 = h1%mod g11 = h11 % mod g12 = h12 % mod g111 = h111 % mod g123 = h123 % mod g112 = h112 % mod #print(g, g1,g11,g12,g111,g112,g123) print(g)