#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n, m, t;
int tu[13][13], zt[13][13][1 << 13];
int main()
{
scanf("%d", &t);
while(t --)
{
memset(zt, 0, sizeof(zt));
memset(tu, 0, sizeof(tu));
scanf("%d%d", &n, &m);
int maxn = 0, maxm = m;
for (int i = 1; i <= n; ++ i)
{
for (int j = 1; j <= m; ++ j)
{
int c;
scanf("%d", &c);
tu[i][j] = c;
if(c == 1)
{
maxn = i;
maxm = j;
}
}
}
zt[0][m][0] = 1;
for (int i = 1; i <= n; ++ i)
{
for (int j = 1; j <= m; ++ j)
{
if(j == 1)
{
for (int k = 0; k < (1 << m + 1); ++ k)
{
if(tu[i][j] == 0)
{
if((k & 1) == 0)
{
zt[i][j][(k << 1)] += zt[i - 1][m][k];
}
}
else
if((k & 1) == 0)
{
zt[i][j][(k << 1) | 3] += zt[i - 1][m][k];
}
else
{
zt[i][j][(k << 1)] += zt[i - 1][m][k];
zt[i][j][(k << 1) ^ 3] += zt[i - 1][m][k];
}
}
}
else
if(j == m)
{
for (int k = 0; k < (1 << m + 1); ++ k)
{
if(tu[i][j] == 0)
{
if(!(((k >> (m - 1)) & 1) | ((k >> m) & 1)))
{
zt[i][j][k] += zt[i][j - 1][k];
}
}
else
{
if(((k >> (m - 1)) & 1) == 0 && ((k >> m) & 1) == 1)
{
zt[i][j][k ^ (1 << (m - 1)) ^ (1 << m)] += zt[i][j - 1][k];
}
if(((k >> (m - 1)) & 1) == 1 && ((k >> m) & 1) == 0)
{
zt[i][j][k] += zt[i][j - 1][k];
}
if(((k >> (m - 1)) & 1) == 1 && ((k >> m) & 1) == 1)
{
zt[i][j][k ^ (1 << (m - 1)) ^ (1 << m)] += zt[i][j - 1][k];
}
}
}
}
else
for (int k = 0; k < (1 << m + 1); ++ k)
{
if(tu[i][j] == 0)
{
if(!(((k >> (j - 1)) & 1) | ((k >> j) & 1)))
{
zt[i][j][k] += zt[i][j - 1][k];
}
}
else
{
if(((k >> (j - 1)) & 1) == 0 && ((k >> j) & 1) == 0)
{
zt[i][j][k ^ (1 << (j - 1)) ^ (1 << j)] += zt[i][j - 1][k];
}
if(((k >> (j - 1)) & 1) == 0 && ((k >> j) & 1) == 1)
{
zt[i][j][k ^ (1 << (j - 1)) ^ (1 << j)] += zt[i][j - 1][k];
zt[i][j][k] += zt[i][j - 1][k];
}
if(((k >> (j - 1)) & 1) == 1 && ((k >> j) & 1) == 0)
{
zt[i][j][k] += zt[i][j - 1][k];
zt[i][j][k ^ (1 << (j - 1)) ^ (1 << j)] += zt[i][j - 1][k];
}
if(((k >> (j - 1)) & 1) == 1 && ((k >> j) & 1) == 1)
{
zt[i][j][k ^ (1 << (j - 1)) ^ (1 << j)] += zt[i][j - 1][k];
}
}
}
}
}
printf("%d\n", zt[maxn][maxm][0]);
}
}