#include<bits/stdc++.h>
using namespace std;
int a[205],b[205],c[205],k,w;
string C[1005][30005],ans;
inline string add(string s1,string s2){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
int l1=s1.size(),l2=s2.size();
for(int i=1;i<=l1;i++)
a[i]=s1[l1-i]-'0';
for(int i=1;i<=l2;i++)
b[i]=s2[l2-i]-'0';
int k=1;
while(k<=max(l1,l2)||c[k]){
c[k]+=a[k]+b[k];
c[k+1]+=c[k]/10;
c[k]%=10;
++k;
}
string s="\0";
for(int i=k-1;i;i--)
s+=char(c[i]+'0');
return s;
}
int main(){
cin>>k>>w;
C[0][0]="1";
for(int i=1;i<(1<<k);++i)
C[i][0]=C[i][i]="1";
for(int i=2;i<(1<<k);++i)
for(int j=1;j<i;++j)
C[i][j]=add(C[i-1][j],C[i-1][j-1]);
ans="0";
for(int i=2;i<=w/k;++i)
ans=add(ans,C[(1<<k)-1][i]);
if(w%k)
for(int i=1;i<=(1<<(w%k))-1;++i)
ans=add(ans,C[(1<<k)-i-1][w/k]);
cout<<ans<<endl;
return 0;
}