#include <bits/stdc++.h>
using namespace std;
long long ans = 0, powi[52];
long long mytree(long long h, long long n, bool lft) {
  if (h == 0) return 0;
  if (n <= powi[h - 1]) {
    if (lft) {
      return mytree(h - 1, n, false) + 1;
    } else {
      return mytree(h - 1, n, false) + powi[h];
    }
  } else {
    if (lft) {
      return mytree(h - 1, n - powi[h - 1], true) + powi[h];
    } else {
      return mytree(h - 1, n - powi[h - 1], true) + 1;
    }
  }
}
int main() {
  long long n, h;
  powi[0] = 1;
  for (int i = 1; i <= 51; i++) {
    powi[i] = powi[i - 1] * 2;
  }
  cin >> h >> n;
  ans = mytree(h, n, true);
  cout << ans << endl;
}
