#include <bits/stdc++.h>
#define ll long long int
#define endl "\n"
using namespace std;
const int N = 1e3 + 10;
const ll INF = 1e18 + 7;
vector<pair<ll,ll>> movements = {
{-1,0}, {1,0}, {0,-1}, {0,1},
{1,1}, {-1,1}, {1,-1}, {-1,-1}
};
ll a[N][N];
ll level[N][N];
ll visited[N][N];
ll n, m;
void reset() {
for(ll i = 0; i < N; i++) {
for(ll j = 0; j < N; j++) {
level[i][j] = INF;
visited[i][j] = 0;
}
}
}
bool valid(ll i, ll j) {
return (i >= 0 && j >= 0 && i < n && j < m);
}
ll bfs() {
queue<pair<ll,ll>> q;
ll mx = 0;
for(ll i = 0; i < n; i++) {
for(ll j = 0; j < m; j++) {
mx = max(mx, a[i][j]);
}
}
for(ll i = 0; i < n; i++) {
for(ll j = 0; j < m; j++) {
if(a[i][j] == mx) {
q.push({i, j});
level[i][j] = 0;
visited[i][j] = 1;
}
}
}
ll ans = 0;
while(!q.empty()) {
pair<ll,ll> current = q.front();
q.pop();
ll current_x = current.first;
ll current_y = current.second;
for(auto child: movements) {
ll child_x = current.first + child.first;
ll child_y = current.second + child.second;
if(!valid(child_x, child_y)) continue;
if(visited[child_x][child_y]) continue;
q.push({child_x, child_y});
visited[child_x][child_y] = 1;
level[child_x][child_y] = level[current_x][current_y] + 1;
ans = max(ans, level[child_x][child_y]);
}
}
return ans;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
ll t; cin >> t;
while(t--) {
reset();
cin >> n >> m;
for(ll i = 0; i < n; i++) {
for(ll j = 0; j < m; j++) {
cin >> a[i][j];
}
}
cout << bfs() << endl;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAojZGVmaW5lIGVuZGwgIlxuIgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAxZTMgKyAxMDsKY29uc3QgbGwgSU5GID0gMWUxOCArIDc7CnZlY3RvcjxwYWlyPGxsLGxsPj4gbW92ZW1lbnRzID0gewogICAgey0xLDB9LCB7MSwwfSwgezAsLTF9LCB7MCwxfSwKICAgIHsxLDF9LCB7LTEsMX0sIHsxLC0xfSwgey0xLC0xfQp9OwpsbCBhW05dW05dOwpsbCBsZXZlbFtOXVtOXTsKbGwgdmlzaXRlZFtOXVtOXTsKbGwgbiwgbTsgCgp2b2lkIHJlc2V0KCkgewogICAgZm9yKGxsIGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgZm9yKGxsIGogPSAwOyBqIDwgTjsgaisrKSB7CiAgICAgICAgICAgIGxldmVsW2ldW2pdID0gSU5GOwogICAgICAgICAgICB2aXNpdGVkW2ldW2pdID0gMDsKICAgICAgICB9CiAgICB9Cn0KCmJvb2wgdmFsaWQobGwgaSwgbGwgaikgewogICAgcmV0dXJuIChpID49IDAgJiYgaiA+PSAwICYmIGkgPCBuICYmIGogPCBtKTsKfQoKbGwgYmZzKCkgewogICAgcXVldWU8cGFpcjxsbCxsbD4+IHE7CiAgICBsbCBteCA9IDA7CiAgICBmb3IobGwgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBmb3IobGwgaiA9IDA7IGogPCBtOyBqKyspIHsKICAgICAgICAgICAgbXggPSBtYXgobXgsIGFbaV1bal0pOwogICAgICAgIH0KICAgIH0KICAgIGZvcihsbCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGZvcihsbCBqID0gMDsgaiA8IG07IGorKykgewogICAgICAgICAgICBpZihhW2ldW2pdID09IG14KSB7CiAgICAgICAgICAgICAgICBxLnB1c2goe2ksIGp9KTsKICAgICAgICAgICAgICAgIGxldmVsW2ldW2pdID0gMDsKICAgICAgICAgICAgICAgIHZpc2l0ZWRbaV1bal0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxsIGFucyA9IDA7CgogICAgd2hpbGUoIXEuZW1wdHkoKSkgewogICAgICAgIHBhaXI8bGwsbGw+IGN1cnJlbnQgPSBxLmZyb250KCk7CiAgICAgICAgcS5wb3AoKTsKICAgICAgICBsbCBjdXJyZW50X3ggPSBjdXJyZW50LmZpcnN0OwogICAgICAgIGxsIGN1cnJlbnRfeSA9IGN1cnJlbnQuc2Vjb25kOwogICAgICAgIGZvcihhdXRvIGNoaWxkOiBtb3ZlbWVudHMpIHsKICAgICAgICAgICAgbGwgY2hpbGRfeCA9IGN1cnJlbnQuZmlyc3QgKyBjaGlsZC5maXJzdDsKICAgICAgICAgICAgbGwgY2hpbGRfeSA9IGN1cnJlbnQuc2Vjb25kICsgY2hpbGQuc2Vjb25kOwogICAgICAgICAgICBpZighdmFsaWQoY2hpbGRfeCwgY2hpbGRfeSkpIGNvbnRpbnVlOwogICAgICAgICAgICBpZih2aXNpdGVkW2NoaWxkX3hdW2NoaWxkX3ldKSBjb250aW51ZTsKICAgICAgICAgICAgcS5wdXNoKHtjaGlsZF94LCBjaGlsZF95fSk7CiAgICAgICAgICAgIHZpc2l0ZWRbY2hpbGRfeF1bY2hpbGRfeV0gPSAxOwogICAgICAgICAgICBsZXZlbFtjaGlsZF94XVtjaGlsZF95XSA9IGxldmVsW2N1cnJlbnRfeF1bY3VycmVudF95XSArIDE7CiAgICAgICAgICAgIGFucyA9IG1heChhbnMsIGxldmVsW2NoaWxkX3hdW2NoaWxkX3ldKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGFuczsKfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7CiAgICBsbCB0OyBjaW4gPj4gdDsKICAgIHdoaWxlKHQtLSkgewogICAgICAgIHJlc2V0KCk7CiAgICAgICAgY2luID4+IG4gPj4gbTsKICAgICAgICBmb3IobGwgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgZm9yKGxsIGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgICAgICAgICBjaW4gPj4gYVtpXVtqXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGJmcygpIDw8IGVuZGw7CiAgICB9Cn0=