#include <bits/stdc++.h>
using namespace std;
const long long dx[] = {0, 1, 0, -1};
const long long dy[] = {1, 0, -1, 0};
const long long inf = 0x3f3f3f3f3f3f3f;
const long long mod = 1000000007;
const long long N = 2e5 + 11;
long long poww(long long n, long long p) {
  long long res = 1;
  while (p) {
    if (p % 2) res = (res * n) % mod;
    n = (n * n) % mod;
    p /= 2;
  }
  return (res + mod) % mod;
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cerr.tie(0);
  cout.tie(0);
  long long x, m;
  cin >> x >> m;
  long long frst = (poww(2, m) - 1) % mod;
  long long ans = ((poww(frst, x) + mod) % mod + mod) % mod;
  cout << ans;
  return 0;
}
