#include<iostream>
using namespace std;
#define MAX_XY 15

int x, y;
int map[MAX_XY + 1][MAX_XY + 1], dp[MAX_XY + 1][MAX_XY + 1];

void resetStr();
void makeDp();
void dispAns();
void disp();

int main(){
    while(cin >>x >>y){
        if(x == 0 && y == 0) break;
        resetStr();
        for(int i = 0; i < y; i++){
            for(int j = 0; j < x; j++){
                cin >>map[i][j];
            }
        }
        makeDp();
        dispAns();
    }
}

void resetStr(){
    for(int i = 0; i <= MAX_XY; i++){
        for(int j = 0; j <= MAX_XY; j++){
            map[i][j] = -1;
            dp[i][j] = 0;
        }
    }
}

void makeDp(){
    int xm[] = {-1, 0, 1}, ym[] = {-1, -1, -1};
    for(int i = 0; i < x; i++){
        if(map[0][i] == 0) dp[0][i]++;
    }
    for(int i = 1; i < y; i++){
        for(int j = 0; j < x; j++){
            if(map[i][j] == 2){
                dp[i][j] += dp[i - 1][j];
                int xn = j, yn = i + 2;
                if(i != y - 1){
                    if(yn >= 0 && yn < y) dp[yn][xn] += dp[i][j];
                    else dp[y - 1][xn] += dp[i][j];
                }
            } else if(map[i][j] == 0){
                for(int k = 0; k < 3; k++){
                    int xn = j + xm[k], yn = i + ym[k];
                    if(xn >= 0 && yn >= 0 && xn < x && yn < y && map[yn][xn] == 0) dp[i][j] += dp[yn][xn];
                }
            }
//            disp();
        }
    }
}

void dispAns(){
    int ans = 0;
    for(int i = 0; i < x; i++){
        ans += dp[y - 1][i];
    }
    cout <<ans <<endl;
}

void disp(){
    cout <<endl;
    for(int i = 0; i < y; i++){
        for(int j = 0; j < x; j++){
            cout <<dp[i][j] <<" ";
        }
        cout <<endl;
    }
}