/*
 * src.cpp
 *
 *  Created on: 2016/08/01
 *      Author: joi
 */

#include <bits/stdc++.h>

using namespace std;

#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,a) FOR(i,0,a)

const int MAX_X=15,MAX_Y=15;

int X,Y;
int c[MAX_Y][MAX_X];

int memo[MAX_Y][MAX_X];

int dfs(int x,int y){
	if (y<Y && c[y][x]==1){
		return 0;
	}
	if (y>=Y-1){
		return 1;
	}
	if (memo[y][x]!=-1){
		return memo[y][x];
	}
	if (c[y][x]==2){
		return dfs(x,y+2);
	}
	int res=0;
	if (x>0 && c[y+1][x-1]==0){
		res+=dfs(x-1,y+1);
	}
	if (x<X-1 && c[y+1][x+1]==0){
		res+=dfs(x+1,y+1);
	}
	res+=dfs(x,y+1);
	return memo[y][x]=res;
}

int main(){
	do{
		scanf("%d %d",&X,&Y);
		if (X || Y){
			REP(i,Y){
				REP(j,X){
					scanf("%d",&c[i][j]);
				}
			}
			memset(memo,-1,sizeof(memo));
			int ans=0;
			REP(i,X){
				ans+=dfs(i,0);
			}
			printf("%d\n",ans);
		}
	}while (X || Y);
	return 0;
}