#include<stdio.h>
#include<string.h>
long long int a[11][11];
long long int c[11][11];
long long int b[11][11][1<<12];
long long int t=1, k=1, n, m;
long long int f(long int x, long long int y, long long int s){
    long long int sum=0, ss;
    if(x==n) return 1;
    if(y==m){
        return f(x+1,0,s);
    }
    if(b[x][y][s]) return b[x][y][s];
    ss = s/t;
    sum = (sum + f(x,y+1,(s%t)*2+c[x+1][y]))%100000007;
    if(ss==1){
       if(t>1 and (s%t)/(t/2)==1 and  y+1<m){
           sum = (sum + f(x,y+2,(s%(t/2))*4+c[x+1][y]*2+c[x+1][y+1]))%100000007;;
       }
       if(c[x+1][y]==1 and x+1<n){
           sum = (sum + f(x,y+1,(s%t)*2))%100000007;;
       }
    }
    b[x][y][s]=sum;
    return sum;
}
int main(){
    long long int i, j, s, kk = 1, l;
    scanf("%lld %lld", &n, &m);
    t=1<<(m-1);
    k=t/2;
    
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            scanf("%lld",&a[i][j]);
    for(i=0;i<3;i++){
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        s = 0;
        for(j=0;j<m;j++){
            s=s*2+(a[0][j]>i ? 1 : 0);
        }
        for(k=0;k<n;k++){
            for(j=0;j<m;j++){
                c[k][j] = (a[k][j]>i ? 1 : 0);
            }
        }
        l = f(0,0,s);
        kk = (kk * l)%100000007;;
        //printf("%d ",s);
        //printf("%d\n", l);
   }
   printf("%lld",kk);
    return 0;
}
