#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define MASK(i) (1LL<<(i))
const int N=305;
const int INF=1e9;
int m,n;
char a[N][N];
int dis[N][N][16];
int cost[N][N];
const int dx[]={-1,1,0,0};
const int dy[]={0,0,-1,1};
const int north=0;
const int south=3;
const int west=1;
const int east=2;
struct state
{
int d,x,y;
bool operator > (const state &o) const
{
return d>o.d;
}
};
int dijkstra(int s)
{
FOR(i,1,m)
FOR(j,1,n)
{
cost[i][j]=abs(a[i][j]-'0'-s);
FOR(mask,0,15) dis[i][j][mask]=INF;
}
FOR(i,1,m)
FOR(j,1,n)
{
int base_mask=0;
if (i==1) base_mask|=MASK(north);
if (j==1) base_mask|=MASK(west);
if (i==m) base_mask|=MASK(south);
if (j==n) base_mask|=MASK(east);
dis[i][j][base_mask]=cost[i][j];
for(int sub=base_mask;sub>0;sub=(sub-1)&base_mask)
{
if (dis[i][j][sub] > cost[i][j]) dis[i][j][sub] = cost[i][j];
}
dis[i][j][0]=cost[i][j];
}
priority_queue<state,vector<state>,greater<state>> pq;
FOR(mask,1,15)
{
for(int sub = (mask - 1) & mask; sub > 0; sub = (sub - 1) & mask)
{
int complement = mask ^ sub;
if (sub < complement) continue;
FOR(i,1,m)
FOR(j,1,n)
{
if (dis[i][j][sub] < INF && dis[i][j][complement] < INF)
{
long long val = dis[i][j][sub] + dis[i][j][complement] - cost[i][j];
if (dis[i][j][mask] > val) dis[i][j][mask] = val;
}
}
}
FOR(i,1,m)
FOR(j,1,n)
{
if (dis[i][j][mask] < INF) pq.push({dis[i][j][mask],i,j});
}
while(!pq.empty())
{
int d=pq.top().d,x=pq.top().x,y=pq.top().y;
pq.pop();
if (d>dis[x][y][mask]) continue;
FOR(k,0,3)
{
int nx=x+dx[k];
int ny=y+dy[k];
if (nx>=1&&nx<=m&&ny>=1&&ny<=n)
{
if (dis[nx][ny][mask] > d + cost[nx][ny])
{
dis[nx][ny][mask] = d + cost[nx][ny];
pq.push({dis[nx][ny][mask],nx,ny});
}
}
}
}
}
int ans=INF;
FOR(i,1,m) FOR(j,1,n) if (ans > dis[i][j][15]) ans = dis[i][j][15];
return ans;
}
int32_t main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int t;
if (cin>>t)
{
while(t--)
{
cin>>m>>n;
FOR(i,1,m)
FOR(j,1,n) cin>>a[i][j];
int ans=INF;
FOR(s,0,9) {
int res = dijkstra(s);
if (ans > res) ans = res;
}
cout<<ans<<'\n';
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgRk9SKGksYSxiKSBmb3IoaW50IGk9KGEpO2k8PShiKTsrK2kpCiNkZWZpbmUgTUFTSyhpKSAoMUxMPDwoaSkpCgpjb25zdCBpbnQgTj0zMDU7CmNvbnN0IGludCBJTkY9MWU5OwoKaW50IG0sbjsKY2hhciBhW05dW05dOwppbnQgZGlzW05dW05dWzE2XTsKaW50IGNvc3RbTl1bTl07Cgpjb25zdCBpbnQgZHhbXT17LTEsMSwwLDB9Owpjb25zdCBpbnQgZHlbXT17MCwwLC0xLDF9Owpjb25zdCBpbnQgbm9ydGg9MDsKY29uc3QgaW50IHNvdXRoPTM7CmNvbnN0IGludCB3ZXN0PTE7CmNvbnN0IGludCBlYXN0PTI7CgpzdHJ1Y3Qgc3RhdGUKewogICAgaW50IGQseCx5OwogICAgYm9vbCBvcGVyYXRvciA+IChjb25zdCBzdGF0ZSAmbykgY29uc3QgCiAgICB7CiAgICAgICAgcmV0dXJuIGQ+by5kOwogICAgfQp9OwoKaW50IGRpamtzdHJhKGludCBzKQp7CiAgICBGT1IoaSwxLG0pCiAgICBGT1IoaiwxLG4pCiAgICB7CiAgICAgICAgY29zdFtpXVtqXT1hYnMoYVtpXVtqXS0nMCctcyk7CiAgICAgICAgRk9SKG1hc2ssMCwxNSkgZGlzW2ldW2pdW21hc2tdPUlORjsKICAgIH0KCiAgICBGT1IoaSwxLG0pCiAgICBGT1IoaiwxLG4pCiAgICB7CiAgICAgICAgaW50IGJhc2VfbWFzaz0wOwogICAgICAgIGlmIChpPT0xKSBiYXNlX21hc2t8PU1BU0sobm9ydGgpOwogICAgICAgIGlmIChqPT0xKSBiYXNlX21hc2t8PU1BU0sod2VzdCk7CiAgICAgICAgaWYgKGk9PW0pIGJhc2VfbWFza3w9TUFTSyhzb3V0aCk7CiAgICAgICAgaWYgKGo9PW4pIGJhc2VfbWFza3w9TUFTSyhlYXN0KTsKICAgICAgICAKICAgICAgICBkaXNbaV1bal1bYmFzZV9tYXNrXT1jb3N0W2ldW2pdOwogICAgICAgIGZvcihpbnQgc3ViPWJhc2VfbWFzaztzdWI+MDtzdWI9KHN1Yi0xKSZiYXNlX21hc2spCiAgICAgICAgewogICAgICAgICAgICBpZiAoZGlzW2ldW2pdW3N1Yl0gPiBjb3N0W2ldW2pdKSBkaXNbaV1bal1bc3ViXSA9IGNvc3RbaV1bal07CiAgICAgICAgfQogICAgICAgIGRpc1tpXVtqXVswXT1jb3N0W2ldW2pdOwogICAgfQoKICAgIHByaW9yaXR5X3F1ZXVlPHN0YXRlLHZlY3RvcjxzdGF0ZT4sZ3JlYXRlcjxzdGF0ZT4+IHBxOwoKICAgIEZPUihtYXNrLDEsMTUpCiAgICB7CiAgICAgICAgZm9yKGludCBzdWIgPSAobWFzayAtIDEpICYgbWFzazsgc3ViID4gMDsgc3ViID0gKHN1YiAtIDEpICYgbWFzaykgCiAgICAgICAgewogICAgICAgICAgICBpbnQgY29tcGxlbWVudCA9IG1hc2sgXiBzdWI7CiAgICAgICAgICAgIGlmIChzdWIgPCBjb21wbGVtZW50KSBjb250aW51ZTsKICAgICAgICAgICAgRk9SKGksMSxtKQogICAgICAgICAgICBGT1IoaiwxLG4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChkaXNbaV1bal1bc3ViXSA8IElORiAmJiBkaXNbaV1bal1bY29tcGxlbWVudF0gPCBJTkYpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIHZhbCA9IGRpc1tpXVtqXVtzdWJdICsgZGlzW2ldW2pdW2NvbXBsZW1lbnRdIC0gY29zdFtpXVtqXTsKICAgICAgICAgICAgICAgICAgICBpZiAoZGlzW2ldW2pdW21hc2tdID4gdmFsKSBkaXNbaV1bal1bbWFza10gPSB2YWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgRk9SKGksMSxtKQogICAgICAgIEZPUihqLDEsbikKICAgICAgICB7CiAgICAgICAgICAgIGlmIChkaXNbaV1bal1bbWFza10gPCBJTkYpIHBxLnB1c2goe2Rpc1tpXVtqXVttYXNrXSxpLGp9KTsKICAgICAgICB9CiAgICAgICAgd2hpbGUoIXBxLmVtcHR5KCkpCiAgICAgICAgewogICAgICAgICAgICBpbnQgZD1wcS50b3AoKS5kLHg9cHEudG9wKCkueCx5PXBxLnRvcCgpLnk7CiAgICAgICAgICAgIHBxLnBvcCgpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGQ+ZGlzW3hdW3ldW21hc2tdKSBjb250aW51ZTsKICAgICAgICAgICAgCiAgICAgICAgICAgIEZPUihrLDAsMykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IG54PXgrZHhba107CiAgICAgICAgICAgICAgICBpbnQgbnk9eStkeVtrXTsKICAgICAgICAgICAgICAgIGlmIChueD49MSYmbng8PW0mJm55Pj0xJiZueTw9bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGlzW254XVtueV1bbWFza10gPiBkICsgY29zdFtueF1bbnldKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlzW254XVtueV1bbWFza10gPSBkICsgY29zdFtueF1bbnldOwogICAgICAgICAgICAgICAgICAgICAgICBwcS5wdXNoKHtkaXNbbnhdW255XVttYXNrXSxueCxueX0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpbnQgYW5zPUlORjsKICAgIEZPUihpLDEsbSkgRk9SKGosMSxuKSBpZiAoYW5zID4gZGlzW2ldW2pdWzE1XSkgYW5zID0gZGlzW2ldW2pdWzE1XTsKICAgIHJldHVybiBhbnM7Cn0KCmludDMyX3QgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApO2NvdXQudGllKDApOwogICAgaW50IHQ7CiAgICBpZiAoY2luPj50KQogICAgewogICAgICAgIHdoaWxlKHQtLSkKICAgICAgICB7CiAgICAgICAgICAgIGNpbj4+bT4+bjsKICAgICAgICAgICAgRk9SKGksMSxtKQogICAgICAgICAgICBGT1IoaiwxLG4pIGNpbj4+YVtpXVtqXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGludCBhbnM9SU5GOwogICAgICAgICAgICBGT1IocywwLDkpIHsKICAgICAgICAgICAgICAgIGludCByZXMgPSBkaWprc3RyYShzKTsKICAgICAgICAgICAgICAgIGlmIChhbnMgPiByZXMpIGFucyA9IHJlczsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0PDxhbnM8PCdcbic7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0=