#include<iostream>
#define MAX 1000
#include<cstring>
using namespace std;
int s[MAX][MAX],dp[MAX][MAX],d[]={1,0,-1},ans;
int w,h;
int func(int y,int x){
	if(y>=h-1)
	return 1;
	if(dp[y][x]!=-1)
	return dp[y][x];
	int sum=0;
	if(s[y][x]==2&&s[y+2][x]!=1)
		sum+=func(y+2,x);
	else{
	for(int i=0;i<3;i++){
		if(x+d[i]>=0&&x+d[i]<w){
			if(s[y+1][x+d[i]]==0)
			sum+=func(y+1,x+d[i]);
			else if(s[y+1][x+d[i]]==2&&i==1)
			sum+=func(y+1,x+d[i]);
		}
	}
	}
	return dp[y][x]=sum;
}
int main(){
	while(cin>>w>>h,w||h){
		for(int i=0;i<h;i++)
			for(int j=0;j<w;j++)
				cin>>s[i][j];
		for(int i=h;i<h+2;i++)
			for(int j=0;j<w;j++)
				s[i][j]=0;
		ans=0;
		memset(dp,-1,sizeof(dp));
		for(int i=0;i<w;i++)
		if(s[0][i]!=1)
			ans+=func(0,i);
		cout<<ans<<endl;
		
	}
	return 0;
}