#include <bits/stdc++.h>
using namespace std ;
typedef long long int ll;
ll dp[22][22][1024];
map <ll,ll> a1;
ll e = 1000000007;
void prime(ll n)
{
while (n % 2 == 0)
{ a1[2]++;
n = n/2;
}
for (int i = 3; i <= sqrt(n); i = i + 2)
{
while (n % i == 0)
{ a1[i]++;
n = n/i;
}
}
if (n > 2)
{
a1[n]++; }
}
int main()
{
map<ll,ll> a2;
a2[2]=0;
a2[3]=1;
a2[5]=2;
a2[7]=3;
a2[11]=4;
a2[13]=5;
a2[17]=6;
a2[19]=7;
a2[23]=8;
a2[29]=9;
ll n,m;
cin>>n>>m ;
ll a[n+1][m+1];
ll i = 1 ;
while(i<=n)
{
ll j=1;
while(j<=m)
{
cin>>a[i][j] ;
j++;
}
i++;
}
ll x = a[1][1] ;
prime(x);
ll sum = 0 ;
for (auto itr = a1.begin(); itr != a1.end(); ++itr)
{
ll x = itr->first ;
ll y = itr->second ;
if(y%2!=0)
{ ll hava = a2[x] ;
ll good = (1<<hava);
sum = (sum^good);
}
else
{
}
}
dp[1][1][sum]=1;
a1.clear();
i=1;
while(i<=n)
{
ll j=1;
while(j<=m)
{
if(i==1 && j==1)
{
}
else
{
ll x = a[i][j] ;
sum = 0 ;prime(x);
for (auto itr = a1.begin(); itr != a1.end(); ++itr)
{
ll x = itr->first ;
ll y = itr->second ;
if(y%2!=0)
{ ll hava = a2[x] ;
ll good = (1<<hava);
sum = (sum^good);
}
}
ll k = 0 ;
while(k<=1023)
{
ll k1 = (sum^k);
dp[i][j][k] = (dp[i-1][j][k1]%e + dp[i][j-1][k1]%e)%e;
k++;
}
a1.clear();}
j++;
}
i++;
}
cout<<dp[n][m][0];
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQgOwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgbGw7CmxsIGRwWzIyXVsyMl1bMTAyNF07Cm1hcCA8bGwsbGw+IGExOwpsbCBlID0gMTAwMDAwMDAwNzsKdm9pZCBwcmltZShsbCBuKSAgCnsgIAogICAgd2hpbGUgKG4gJSAyID09IDApICAKICAgIHsgIGExWzJdKys7CiAgICAgICAgbiA9IG4vMjsgIAogICAgfSAgCiAgICBmb3IgKGludCBpID0gMzsgaSA8PSBzcXJ0KG4pOyBpID0gaSArIDIpICAKICAgIHsgIAogICAgICAgIHdoaWxlIChuICUgaSA9PSAwKSAgCiAgICAgICAgeyAgYTFbaV0rKzsKICAgICAgICAgICAgbiA9IG4vaTsgIAogICAgICAgIH0gIAogICAgfSAgCiAgICBpZiAobiA+IDIpCiAgICB7CiAgICAgICAgYTFbbl0rKzsgfQp9IAppbnQgbWFpbigpCnsKICAgIG1hcDxsbCxsbD4gYTI7CiAgICBhMlsyXT0wOwogICAgYTJbM109MTsKICAgIGEyWzVdPTI7CiAgICBhMls3XT0zOwogICAgYTJbMTFdPTQ7CiAgICBhMlsxM109NTsKICAgIGEyWzE3XT02OwogICAgYTJbMTldPTc7CiAgICBhMlsyM109ODsKICAgIGEyWzI5XT05OwogICAgbGwgbixtOwogICAgY2luPj5uPj5tIDsgCiAgICBsbCBhW24rMV1bbSsxXTsKICAgIGxsIGkgPSAxIDsgCiAgICB3aGlsZShpPD1uKQogICAgewogICAgICAgIGxsIGo9MTsKICAgICAgICB3aGlsZShqPD1tKQogICAgICAgIHsKICAgICAgICAgICAgY2luPj5hW2ldW2pdIDsgCiAgICAgICAgICAgIGorKzsKICAgICAgICB9CiAgICAgICAgaSsrOwogICAgfQogICAgCiAgICBsbCB4ID0gYVsxXVsxXSA7IAogICAgCiAgICBwcmltZSh4KTsKICAgIGxsIHN1bSAgPSAwIDsgCiAgICBmb3IgKGF1dG8gaXRyID0gYTEuYmVnaW4oKTsgaXRyICE9IGExLmVuZCgpOyArK2l0cikgCnsgCiAgICAgbGwgeCA9IGl0ci0+Zmlyc3QgIDsgCiAgICAgbGwgeSA9IGl0ci0+c2Vjb25kIDsgCiAgICAgaWYoeSUyIT0wKQogICAgIHsgICBsbCBoYXZhICA9IGEyW3hdICA7IAogICAgICAgICBsbCBnb29kID0gKDE8PGhhdmEpOwogICAgICAgICBzdW0gPSAoc3VtXmdvb2QpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAKICAgICB9Cn0KICAgIGRwWzFdWzFdW3N1bV09MTsKICAgIGExLmNsZWFyKCk7CiAgICBpPTE7CiAgICB3aGlsZShpPD1uKQogICAgewogICAgICAgIGxsIGo9MTsKICAgICAgICB3aGlsZShqPD1tKQogICAgICAgIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKGk9PTEgJiYgaj09MSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsbCB4ID0gYVtpXVtqXSA7IAogICAgICAgICAgICAgICAgIHN1bSAgPSAwIDtwcmltZSh4KTsgCiBmb3IgKGF1dG8gaXRyID0gYTEuYmVnaW4oKTsgaXRyICE9IGExLmVuZCgpOyArK2l0cikgCnsgCiAgICAgbGwgeCA9IGl0ci0+Zmlyc3QgIDsgCiAgICAgbGwgeSA9IGl0ci0+c2Vjb25kIDsgCiAgICAgaWYoeSUyIT0wKQogICAgIHsgICBsbCBoYXZhICA9IGEyW3hdICA7IAogICAgICAgICBsbCBnb29kID0gKDE8PGhhdmEpOwogICAgICAgICBzdW0gPSAoc3VtXmdvb2QpOwogICAgIH0KfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBsbCBrID0gMCA7CiAgICAgICAgICAgICAgICB3aGlsZShrPD0xMDIzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGxsIGsxID0gKHN1bV5rKTsKICAgICAgICAgICAgICAgICAgICBkcFtpXVtqXVtrXSA9IChkcFtpLTFdW2pdW2sxXSVlICsgZHBbaV1bai0xXVtrMV0lZSklZTsKICAgICAgICAgICAgICAgICAgICBrKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGExLmNsZWFyKCk7fQogICAgICAgICAgICBqKys7CiAgICAgICAgfQppKys7Cn0KICAgIGNvdXQ8PGRwW25dW21dWzBdOwogICAgcmV0dXJuICAwIDsKfQ==