#include<bits/stdc++.h>
using namespace std;
long long a[1010],n,cnt,ds[1011],ans,mod=1e18;
void f(long long sz,int dj,long long cs){
if(sz<=cnt){
ans+=ds[cs];
if(ans>mod||ans<0){
ans=1;
}
if(dj==1){
if(sz+1>cnt){
return ;
}else if(sz+1==cnt){
ans++;
if(ans>mod){
ans=1;
}
return ;
}else{
ans++;
if(ans>mod){
ans=1;
}
f(sz+1+a[cs],2,cs);
}
}else{
if((sz+1)<cnt){
ans=-1;
return;
}else{
return;
}
}
}else{
if(sz-a[cs]>=cnt){
return;
}else{
f(sz-a[cs]+1+a[cs-1],1,cs-1);
}
}
}
int main(){
cin>>n>>cnt;
a[0]=1;
for(int i=1;i<=n;i++){
if((a[i-1]*2+3)>mod||(a[i-1]*2+3)<0){
a[i]=1;
}else{
a[i]=a[i-1]*2+3;
}
}
ds[0]=1;
for(int i=1;i<=n;i++){
if((ds[i-1]*2+1)>mod||(ds[i-1]*2+1)<0){
ds[i]=1;
}else{
ds[i]=ds[i-1]*2+1;
}
}
if(cnt<=n){
cout<<0;
return 0;
}else{
f(1+a[n-1],1,n-1);
cout<<ans;
}
return 0;
}