#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
#define max( a,b ) ( (a)>(b)?(a):(b) )
using namespace std;
long long N,M,dp[12][4097];
void DFS( int sta, int c,long long stu,long long ans )
{
if( sta >= M )return;
DFS( sta+1,c,stu,ans );
if( !(stu&(1<<sta)) && !(stu&(1<<(sta-1))) )
{
long long t = stu|(1<<sta)|(1<<(sta-1));
if( dp[c][t] == -1 )dp[c][t] = ans;
else dp[c][t] += ans;
DFS( sta+1,c,t,ans);
}
}
int main( )
{
while( scanf("%I64d%I64d",&N,&M) && N + M )
{
memset( dp,-1,sizeof(dp) );
dp[0][(1<<M)-1] = 1;
for( int i = 1; i <= N; i++ )
for( int j = 0; j < (1<<M); j++ )
if( dp[i-1][j] != -1 )
{
dp[i][(~j)&((1<<M)-1)] = dp[i-1][j];
DFS( 1,i,(~j)&((1<<M)-1), dp[i-1][j] );
}
long long res = max(0,dp[N][(1<<M)-1]);
printf("%I64d\n",res);
}
return 0;
}