#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll sizeB[60], patty[60];
ll f(int N, ll x){
if(x0) return 0;
if(N0) return 1; // 等级0只有P
if(x==1) return 0; // 最底层B
if(x <= 1 + sizeB[N-1])
return f(N-1, x-1);
if(x == 2 + sizeB[N-1])
return patty[N-1] + 1;
return patty[N-1] + 1 + f(N-1, x - sizeB[N-1] - 2);
}
int main(){
int N; ll x;
cin >> N >> x;
sizeB[0]=1; patty[0]=1;
for(int i=1;i<=N;i++){
sizeB[i] = 2sizeB[i-1] + 3;
patty[i] = 2patty[i-1] + 1;
}
cout << f(N, x) << "\n";
return 0;
}