#include <iostream>
#define N 15
using namespace std;
int jump(int,int);
int X,Y,data[N][N],dp[N][N];
int main(){
  bool q[N][N];
  while(1){
    cin >> X >> Y;
    if(X==0&&Y==0) break;
    for(int i=0;i<Y;i++)
      for(int j=0;j<X;j++) cin >> data[i][j],q[i][j]=false,dp[i][j]=0;
    for(int i=0;i<X;i++)
      if(data[0][i]==0) q[0][i]=true,dp[0][i]=1;
    for(int i=0;i<Y-1;i++){
      for(int j=0;j<X;j++){
	if(q[i][j]==true){
	  if(0<=j-1&&data[i+1][j-1]==0) dp[i+1][j-1]+=dp[i][j],q[i+1][j-1]=true;
	  if(j+1<X&&data[i+1][j+1]==0) dp[i+1][j+1]+=dp[i][j],q[i+1][j+1]=true;
	  if(data[i+1][j]==0) dp[i+1][j]+=dp[i][j],q[i+1][j]=true;
	  else if(data[i+1][j]==2){
	    int r=jump(i+1,j);
	    if(r==-1) dp[Y-1][j]+=dp[i][j];
	    else if(r!=-2) dp[r][j]+=dp[i][j],q[r][j]=true;
	  }
	}
      }
    }
    /*    cout << endl;
    for(int i=0;i<Y;i++){
      for(int j=0;j<X;j++){
	cout << q[i][j] << ' ';
      }
      cout << endl;
    }
    cout << endl;
    for(int i=0;i<Y;i++){
      for(int j=0;j<X;j++){
	cout << dp[i][j] << ' ';
      }
      cout << endl;
      }*/
    int cnt=0;
    for(int i=0;i<X;i++) cnt+=dp[Y-1][i];
    cout << cnt << endl;
  }
  return 0;
}
int jump(int y,int x){
  while(1){
    y+=2;
    if(y<Y&&data[y][x]==1) break;
    if(y>=Y-1) return -1;
    if(data[y][x]==0) return y;
  }
  return -2;
}