def cmb(n, r, mod): if (r < 0) or (n < r): return 0 r = min(r, n-r) return fact[n]*factinv[r]*factinv[n-r]%mod mod = 10**9+7 N = 10**6+100 # N は必要分だけ用意する fact = [1, 1] # fact[n] = (n! mod p) factinv = [1, 1] # factinv[n] = ((n!)^(-1) mod p) inv = [0, 1] # factinv 計算用 for i in range(2, N+1): fact.append((fact[-1]*i)%mod) inv.append((-inv[mod%i]*(mod//i))%mod) factinv.append((factinv[-1]*inv[-1])%mod) h, w = map(int,input().split()) ans = 0 u = 1 for i in range(h+1): ans = (ans + u * cmb(h, i, mod) * pow(pow(2, h-i, mod) - 1, w, mod)) % mod u *= -1 print(ans)