#include <bits/stdc++.h>
using namespace std;
long long qpow(long long a, long long b) {
  long long res = 1, base = a;
  while (b) {
    if (b % 2) res = res * base;
    base = base * base;
    b /= 2;
  }
  return res;
}
long long powmod(long long a, long long b) {
  long long res = 1, base = a;
  while (b) {
    if (b % 2) res = res * base % 1000000007;
    base = base * base % 1000000007;
    b /= 2;
  }
  return res;
}
long long n, h;
long long two[100];
long long a[100];
void read() { scanf("%I64d%I64d", &h, &n); }
void work() {
  long long cnt = 0, t = 0, ans = 0;
  two[0] = 1;
  for (int i = 1; i <= h; i++) two[i] = two[i - 1] * 2;
  for (int i = 0; i < h; i++) t += two[i];
  for (int i = 1; i <= h; i++) two[i] += two[i - 1];
  t += n;
  while (t) {
    a[cnt++] = t % 2;
    t /= 2;
  }
  long long now = 0;
  for (int i = cnt - 2, j = h - 1; i >= 0; i--, j--) {
    ans++;
    if (a[i] != now) ans += two[j], now ^= 1;
    now ^= 1;
  }
  printf("%I64d\n", ans);
}
int main(void) {
  read();
  work();
  return 0;
}
