#include <cstdio>
#include <vector>

using namespace std;

int width,height;
vector< vector<int> > m;
vector< vector<int> > mm;

int Get(int y,int x);

int main(){
	int self;
	while(scanf("%d",&width) != EOF){
		scanf("%d",&height);
		if(width == 0 && height == 0){
			break;
		}
		//printf("%d:%d\n",width,height);
		m.clear();
		mm.clear();
		
		for(int j=0;j<height;j++){
			vector<int> v;
			for(int i=0;i<width;i++){
				scanf("%d",&self);
				v.push_back(self);
			}
			m.push_back(v);
		}
		for(int j=0;j<=height;j++){
			vector<int> vv;
			for(int i=0;i<width;i++){
				vv.push_back(0);
			}
			mm.push_back(vv);
		}
		
		/*
		for(int j=0;j<height;j++){
			for(int i=0;i<width;i++){
				printf("%d ",m[j][i]);
			}
			printf("\n");
		}
		*/
		
		int xx,yy;

		for(int y = 0; y <= height; y ++){
			for(int x = 0; x < width; x ++){
				xx = x;
				yy = y - 1;
				if(y == height){
					mm[y][x] += mm[yy][xx];
					yy = y - 2;
					if(yy >= 0){
						if(m[yy][xx] == 2){
							mm[y][x] += mm[yy][xx];
						}
					}
				}else{
					switch(m[y][x]){
						case 0: //ó
							if(yy == -1){
								mm[y][x] = 1;
							}else{
								mm[y][x] += Get(yy,xx-1) + Get(yy,xx) + Get(yy,xx+1);
								yy = y - 2;
								if(yy >= 0){
									if(m[yy][xx] == 2){
										mm[y][x] += mm[yy][xx];
									}
								}
							}
							break;
						case 1: //áQ¨
							break;
						case 2: //Wvä
							mm[y][x] += Get(yy,xx);
							yy = y - 2;
							if(yy >= 0){
								if(m[yy][xx] == 2){
									mm[y][x] += mm[yy][xx];
								}
							}
							break;
					}
				}
			}
			
		}
		
		/*
		for(int j=0;j<=height;j++){
			for(int i=0;i<width;i++){
				printf("%d	",mm[j][i]);
			}
			printf("\n");
		}
		*/
		int ans = 0;
		for(int i=0;i<width;i++){
			ans += mm[height][i];
		}
		printf("%d\n",ans);
	}
	return 0;
}

int Get(int y,int x){
	if(y >= height){ return 0; }
	if(x >= width){ return 0; }
	if(y < 0){ return 0; }
	if(x < 0){ return 0; }
	if(m[y][x] == 2){ return 0; }
	return mm[y][x];
}