#include<bits/stdc++.h>
using namespace std;
const int minx=-1e9;
const int mod=100000000;
int m,n;
int dp[15][(1<<15)];
int a[15][15];
string jk(int x){
string s="";
while(x){
if(x&1){
s='1'+s;
}
else{
s='0'+s;
}
x>>=1;
}
return s;
}
int dfs(int zt,int op){
if(op>m){
return 1;
}
if(dp[op][zt]!=minx){
return dp[op][zt];
}
int cnt=0;
for(int i=n;i>=1;i--){
if(!a[i]||zt&(1<<(i-1))){
continue;
}
if(i==n){
cnt+=dfs((zt|(1<<i))|((1<<i)+1),op);
cnt+=dfs(zt|(1<<i),op+1);
}
else if(i==1){
cnt+=dfs((zt|(1<<i))|((1<<i)-1),op);
cnt+=dfs(zt|(1<<i),op+1);
}
else{
cnt+=dfs((zt|(1<<i))|((1<<i)+1)|((1<<i)-1),op);
cnt+=dfs(zt|(1<<i),op+1);
}
}
return dp[op][zt]=cnt;
}
int main(){
for(int i=0;i<=14;i++){
for(int j=0;j<=(1<<14);j++){
dp[i][j]=minx;
}
}
cin>>m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
cout<<dfs(0,1);
return 0;
}