#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
typedef long long ll;
int f[9][(1<<9)+5][82],n,k;
int ge(int t)
{
int cnt=0;
for(int i=0;t>>i>0;i++)
if( (t>>i)&1==1 ) cnt++;
return cnt;
}
bool check(int st)// 本行判断
{
return !(st&st>>1);
}
bool check2(int st,int st2) // 双行之间判断,st当前,st2上一行
{
if( st&st2 ) return 0;
if( (st<<1)&st2 ) return 0;
if( (st>>1)&st2 ) return 0;
if( (st2>>1)&st2 ) return 0;//附带把上一行的单行判断
return 1;
}
int main()
{
cin>>n>>k;
for(int i=0;i<(1<<n);i++)
if(check(i)) f[0][i][ge(i)]=1;
for(int i=1;i<n;i++)
{
for(int j=0;j<(1<<n);j++)// j is 第i行状态
{
if(!check(j)) continue;
for(int x=ge(j);x<=k;x++) //一共放x个(包括当前行i)
for(int y=0;y<(1<<n);y++) // i-1行状态
{
if( !check2(j,y)) continue;
f[i][j][x]+=f[i-1][y][x-ge(j)];
}
}
}
ll ans=0;
for(int i=0;i<(1<<n);i++)
ans+=f[n-1][i][k];
cout<<ans;
return 0;
}