#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;
}