#include <bits/stdc++.h>
using namespace std;
#define ii pair < int , int >
const int N = 1e6 + 5;
int q , n , m;
vector < int > dist11[N] , distnn[N] , a[N];
deque < ii > dq;
int dx[] = {1 , 0 , -1 , 0};
int dy[] = {0 , 1 , 0 , -1};
void BFS(int i , int j , int k , vector < int > dist[N])
{
for(int i = 1 ; i <= n ; i++)
for(int j = 1 ; j <= m ; j++)
dist[i][j] = 1e9;
dist[i][j] = 0;
dq.push_back(ii(i , j));
while(!dq.empty())
{
int u = dq.front().first;
int v = dq.front().second;
dq.pop_front();
for(int s = 0 ; s < 4 ; s++)
{
int x = u + dx[s];
int y = v + dy[s];
if(x > 0 && x <= n && y > 0 && y <= m)
{
int w = (a[u][v] != k && a[u][v] != 3);
if(dist[x][y] > dist[u][v] + w)
{
dist[x][y] = dist[u][v] + w;
if(w == 1)
dq.push_back(ii(x , y));
else
dq.push_front(ii(x , y));
}
}
}
}
}
main()
{
freopen("CAFE.INP","r",stdin);
freopen("CAFE.OUT","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cin >> q;
while(q--)
{
cin >> n >> m;
for(int i = 0 ; i <= n + 1 ; i++)
{
for(int j = 0 ; j <= m + 1 ; j++)
dist11[i].push_back(0) , a[i].push_back(0) , distnn[i].push_back(0);
}
for(int i = 1 ; i <= n ; i++)
for(int j = 1 ; j <= m ; j++)
cin >> a[i][j];
BFS(1 , 1 , 2 , dist11);
BFS(n , m , 1 , distnn);
int ans = 1e18;
for(int i = 1 ; i <= n ; i++)
for(int j = 1 ; j <= m ; j++)
ans = min(ans , dist11[i][j] + distnn[i][j]);
cout << ans << "\n";
for(int i = 0 ; i <= n + 1 ; i++)
{
a[i].clear();
dist11[i].clear();
distnn[i].clear();
}
//exit(0);
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGlpIHBhaXIgPCBpbnQgLCBpbnQgPgoKY29uc3QgaW50IE4gPSAxZTYgKyA1OwppbnQgcSAsIG4gLCBtOwp2ZWN0b3IgPCBpbnQgPiBkaXN0MTFbTl0gLCBkaXN0bm5bTl0gLCBhW05dOwpkZXF1ZSA8IGlpID4gZHE7CmludCBkeFtdID0gezEgLCAwICwgLTEgLCAwfTsKaW50IGR5W10gPSB7MCAsIDEgLCAwICwgLTF9OwoKdm9pZCBCRlMoaW50IGkgLCBpbnQgaiAsIGludCBrICwgdmVjdG9yIDwgaW50ID4gZGlzdFtOXSkKewogICAgZm9yKGludCBpID0gMSA7IGkgPD0gbiA7IGkrKykKICAgICAgICBmb3IoaW50IGogPSAxIDsgaiA8PSBtIDsgaisrKQogICAgICAgICAgICBkaXN0W2ldW2pdID0gMWU5OwogICAgZGlzdFtpXVtqXSA9IDA7CiAgICBkcS5wdXNoX2JhY2soaWkoaSAsIGopKTsKCiAgICB3aGlsZSghZHEuZW1wdHkoKSkKICAgIHsKICAgICAgICBpbnQgdSA9IGRxLmZyb250KCkuZmlyc3Q7CiAgICAgICAgaW50IHYgPSBkcS5mcm9udCgpLnNlY29uZDsKICAgICAgICBkcS5wb3BfZnJvbnQoKTsKICAgICAgICBmb3IoaW50IHMgPSAwIDsgcyA8IDQgOyBzKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgeCA9IHUgKyBkeFtzXTsKICAgICAgICAgICAgaW50IHkgPSB2ICsgZHlbc107CiAgICAgICAgICAgIGlmKHggPiAwICYmIHggPD0gbiAmJiB5ID4gMCAmJiB5IDw9IG0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludCB3ID0gKGFbdV1bdl0gIT0gayAmJiBhW3VdW3ZdICE9IDMpOwogICAgICAgICAgICAgICAgaWYoZGlzdFt4XVt5XSA+IGRpc3RbdV1bdl0gKyB3KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGRpc3RbeF1beV0gPSBkaXN0W3VdW3ZdICsgdzsKICAgICAgICAgICAgICAgICAgICBpZih3ID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgIGRxLnB1c2hfYmFjayhpaSh4ICwgeSkpOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgZHEucHVzaF9mcm9udChpaSh4ICwgeSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgptYWluKCkKewogICAgZnJlb3BlbigiQ0FGRS5JTlAiLCJyIixzdGRpbik7CiAgICAgZnJlb3BlbigiQ0FGRS5PVVQiLCJ3IixzdGRvdXQpOwogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY2luID4+IHE7CiAgICB3aGlsZShxLS0pCiAgICB7CiAgICAgICAgY2luID4+IG4gPj4gbTsKICAgICAgICBmb3IoaW50IGkgPSAwIDsgaSA8PSBuICsgMSA7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IDAgOyBqIDw9IG0gKyAxIDsgaisrKQogICAgICAgICAgICAgICAgZGlzdDExW2ldLnB1c2hfYmFjaygwKSAsIGFbaV0ucHVzaF9iYWNrKDApICwgZGlzdG5uW2ldLnB1c2hfYmFjaygwKTsKICAgICAgICB9CgogICAgICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IG4gOyBpKyspCiAgICAgICAgICAgIGZvcihpbnQgaiA9IDEgOyBqIDw9IG0gOyBqKyspCiAgICAgICAgICAgICAgICBjaW4gPj4gYVtpXVtqXTsKICAgICAgICBCRlMoMSAsIDEgLCAyICwgZGlzdDExKTsKICAgICAgICBCRlMobiAsIG0gLCAxICwgZGlzdG5uKTsKCiAgICAgICAgaW50IGFucyA9IDFlMTg7CiAgICAgICAgZm9yKGludCBpID0gMSA7IGkgPD0gbiA7IGkrKykKICAgICAgICAgICAgZm9yKGludCBqID0gMSA7IGogPD0gbSA7IGorKykKICAgICAgICAgICAgICAgIGFucyA9IG1pbihhbnMgLCBkaXN0MTFbaV1bal0gKyBkaXN0bm5baV1bal0pOwogICAgICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7CiAgICAgICAgZm9yKGludCBpID0gMCA7IGkgPD0gbiArIDEgOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBhW2ldLmNsZWFyKCk7CiAgICAgICAgICAgIGRpc3QxMVtpXS5jbGVhcigpOwogICAgICAgICAgICBkaXN0bm5baV0uY2xlYXIoKTsKICAgICAgICB9CiAgICAgICAgLy9leGl0KDApOwogICAgfQp9