// 2011/07/31 Tazoe

#include <iostream>
using namespace std;

int main()
{
	while(true){
		int X, Y;
		cin >> X >> Y;
		if(X==0&&Y==0)
			break;

		int C[18][17];
		for(int i=0; i<=Y+2; i++)
			for(int j=0; j<=X+1; j++)
				C[i][j] = 1;

		for(int i=1; i<=Y; i++)
			for(int j=1; j<=X; j++)
				cin >> C[i][j];

		for(int i=Y+1; i<=Y+2; i++)
			for(int j=1; j<=X; j++)
				C[i][j] = 0;

		int DP[18][17];
		for(int i=0; i<=Y+2; i++)
			for(int j=0; j<=X+1; j++)
				DP[i][j] = 0;

			for(int j=1; j<=X; j++)
				if(C[1][j]==0)
					DP[1][j] = 1;

		for(int i=1; i<=Y-1; i++)
			for(int j=1; j<=X; j++)
				if(C[i][j]==0){
					for(int k=j-1; k<=j+1; k++)
						if(C[i+1][k]==0){
							DP[i+1][k] += DP[i][j];
						}
						else if(C[i+1][k]==1){
							DP[i+1][k] = 0;
						}
						else if(C[i+1][k]==2){
							if(k==j)
								DP[i+1][k] += DP[i][j];
						}
				}
				else if(C[i][j]==1){
					DP[i][j] = 0;
				}
				else if(C[i][j]==2){
					if(C[i+2][j]==1)
						DP[i+2][j] = 0;
					else
						DP[i+2][j] += DP[i][j];
				}

			for(int j=1; j<=X; j++)
				if(C[Y][j]==1){
					DP[Y][j] = 0;
				}

		int sum = 0;
		for(int i=Y; i<=Y+1; i++)
			for(int j=1; j<=X; j++)
				sum += DP[i][j];

		cout << sum <<endl;
	}

	return 0;
}