#include <bits/stdc++.h>
using namespace std;

int H,W;
int L=2;
int tatami[25][25];
int dfs(int x,int y){
	if( x == W ){ y++; x=0; }
	int K = y * W + x + 1;
	if( y == H ){
		/*for(int i = 0 ; i < H ; i++){
			for(int j = 0 ; j < W ; j++) cout << (char)('A'+tatami[i][j]);
			cout << endl;
		}
		cout << endl;
		*/
		return 1;
	}
	if( tatami[y][x] ) return dfs(x+1,y);
	
	if( x && y ){
		int a = tatami[y-1][x-1];
		int b = tatami[y][x-1];
		int c = tatami[y-1][x];
		if( a != b && a != c && b != c ){
			return 0;
		}
	}
	int ans = 0;
	{
		int l = L;
		int h = l / 2;
		if( l % 2 == 0 && x + l <= W &&  y + h <= H ){
			int f = 0;
			for(int j = 0 ; j < h ; j++)
				for(int k = 0 ; k < l ; k++)
					f += tatami[y+j][x+k];
			if(!f){
				for(int j = 0 ; j < h ; j++)
					for(int k = 0 ; k < l ; k++)
						tatami[y+j][x+k] = K;
				ans += dfs(x+1,y);
				for(int j = 0 ; j < h ; j++)
					for(int k = 0 ; k < l ; k++)
						tatami[y+j][x+k] = 0;		
			}
		}
	}
	
	{
		int h = L;
		int l = h / 2;
		if( h % 2 == 0 && x + l <= W &&  y + h <= H ){
			int f = 0;
			for(int j = 0 ; j < h ; j++)
				for(int k = 0 ; k < l ; k++)
					f += tatami[y+j][x+k];
			if(!f){
				for(int j = 0 ; j < h ; j++)
					for(int k = 0 ; k < l ; k++)
						tatami[y+j][x+k] = K;
				ans += dfs(x+1,y);
				for(int j = 0 ; j < h ; j++)
					for(int k = 0 ; k < l ; k++)
						tatami[y+j][x+k] = 0;		
			}
		}
	}
	return ans;
}
int main(){
	while(cin >> H >> W && H){
		int ans = 0;
		for(int i = 2 ; i <= 2 ; i+=2){
			L = i;
			ans += dfs(0,0);
		}
		cout << ans << endl;
	}
}