//迷雾森林
//dp优化
//快读+图和dp存一起
//注意取模
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

const int p=2333;
inline int read() {
    int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
    for (;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f;
}

ll f[3010][3010];
int main()
{
//    ios::sync_with_stdio(false);
//    cin.tie(0);cout.tie(0);

    int n,m;
    n=read();m=read();

    for(int i=1;i<=n;i++)
        for(int j=1; j<=m ;j++) f[i][j]=read();

    for(int i=n;i>= 1;i--)
        for(int j=1;j<=m;j++)
    {
        if(f[i][j]==1) {f[i][j]=0;continue;}//如果走不了,continue,并把路数改为0
        if(i==n && j==2)    f[i][j]=1; //起点相邻的两点初始化
        else if(i==n-1 && j==1)   f[i][j]=1;
        else
        f[i][j]=(f[i+1][j]+f[i][j-1])%p; //dp注意取模
    }
    cout<<f[1][m]<<endl;
}