#include<cstdio>
#define state(x) (1<<x)
using namespace std;
int n,m;
int ch[15],f[15][state(15)]={};
int sit[state(15)],cnt=0;
void dfs(int x,int cur){
if(cur>=m){
// fprintf(stdout,"sit[%d]=%d;",cnt,x);
sit[cnt++]=x;
return;
}
dfs(x,cur+1);
dfs(x|(1<<cur),cur+2);
}
bool isin(int i,int x){
i=ch[i],x=sit[x];
// fprintf(stdout,"%d|%d=%d;\n",i,x,i|x);
if((i|x)!=i)return 0;
return 1;
}
bool cando(int a,int b){
if(sit[a]&sit[b])return 0;
return 1;
}
int main(){
scanf("%d%d",&n,&m);
dfs(0,0);
// printf("%d\n",(2|5)==2);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
int x;
scanf("%d",&x);
ch[i]=(ch[i]<<1)+x;
}
for(int i=0;i<cnt;i++)if(isin(0,i))f[0][i]=1;
for(int i=1;i<n;i++)
for(int j=0;j<cnt;j++)
for(int k=0;k<cnt;k++){
if(!isin(i,j)||!cando(j,k))continue;
f[i][j]+=f[i-1][k];
// fprintf(stdout,"f[%d][%d]=%d;\n",i,j,f[i][j]);
}
long long ans=0;
for(int i=0;i<cnt;i++)if(isin(n-1,i))ans+=f[n-1][i];
printf("%lld",ans);
return 0;
}