#include<bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define ld long double
#define int long long
#define pb push_back
#define f first
#define s second
#define pq priority_queue
#define fast ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define read_file freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
using namespace std;
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;
// template<class T> using ordered_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
// template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
vector<pair<int, int>> loc;
vector<vector<int>> ind;
int n, m;
struct dsu{
vector<int> p;
vector<int> minii, maxii, minij, maxij;
void build(int n){
p.assign(n, -1);
minii.assign(n, 0);
minij.assign(n, 0);
maxii.assign(n, 0);
maxij.assign(n, 0);
}
int get(int u){
return (p[u]<0?u:p[u]=get(p[u]));
}
void merge(int u, int v){
if((u=get(u))==(v=get(v))) return;
if(-p[u]<-p[v]) swap(u, v);
p[u]+=p[v];
minii[u]|=minii[v];
minij[u]|=minij[v];
maxii[u]|=maxii[v];
maxij[u]|=maxij[v];
p[v]=u;
}
};
// vector<vector<bool>> vis;
vector<vector<int>> a;
dsu d1;
int dx[8] = {-1, 1, 0, 0, -1, -1, 1, 1};
int dy[8] = { 0, 0, -1, 1, -1, 1, -1, 1};
bool valid(int i, int j){
return (i>=0&&i<n&&j>=0&&j<m);
}
void solve(){
cin>>n>>m;
a.assign(n, vector<int>(m));
loc.assign(n*m+10, {-1, -1});
ind.assign(n, vector<int>(m));
d1.build(n*m+10);
for(int i=0; i<n; i++) for(int j=0; j<m; j++) cin>>a[i][j];
int cntr=0;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
loc[cntr]={i, j};
ind[i][j]=cntr;
cntr++;
}
}
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
if(i==0){
d1.minii[ind[i][j]]=true;
}
if(j==0){
d1.minij[ind[i][j]]=true;
}
if(i==n-1){
d1.maxii[ind[i][j]]=true;
}
if(j==m-1){
d1.maxij[ind[i][j]]=true;
}
}
}
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
for(int k=0; k<8; k++){
if(valid(i+dy[k], j+dx[k])&&a[i+dy[k]][j+dx[k]]==a[i][j]){
d1.merge(ind[i][j], ind[i+dy[k]][j+dx[k]]);
}
}
}
}
for(int i=0; i<n; i++){
map<int, int> m1;
for(int j=0; j<m; j++){
if(m1.count(a[i][j])) {
d1.merge(ind[i][j], m1[a[i][j]]);
}
m1[a[i][j]]=ind[i][j];
}
}
for(int j=0; j<m; j++){
map<int, int> m1;
for(int i=0; i<n; i++){
if(m1.count(a[i][j])) {
d1.merge(ind[i][j], m1[a[i][j]]);
}
m1[a[i][j]]=ind[i][j];
}
}
vector<int> v1;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
int vertix=d1.get(ind[i][j]);
if(d1.minij[vertix]&&d1.maxij[vertix]){ // left right
v1.pb(a[i][j]);
}
if(d1.minij[vertix]&&d1.minii[vertix]){ // left top
v1.pb(a[i][j]);
}
if(d1.maxii[vertix]&&d1.minii[vertix]){ // down top
v1.pb(a[i][j]);
}
if(d1.maxii[vertix]&&d1.maxij[vertix]){ // down right
v1.pb(a[i][j]);
}
}
}
sort(v1.begin(), v1.end());
int mex=0;
for(int i=0; i<v1.size(); i++){
if(v1[i]==mex) mex++;
}
cout<<mex<<endl;
}
int32_t main() {
fast;
int t;
t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSB1bGwgdW5zaWduZWQgbGwKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmIGZpcnN0CiNkZWZpbmUgcyBzZWNvbmQKI2RlZmluZSBwcSBwcmlvcml0eV9xdWV1ZQojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKSxjaW4udGllKDApLGNvdXQudGllKDApCiNkZWZpbmUgcmVhZF9maWxlIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOyBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLy8gI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgovLyAjaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KLy8gdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CiAKLy8gdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgb3JkZXJlZF9tdWx0aXNldCA9IHRyZWU8VCwgbnVsbF90eXBlLCBsZXNzX2VxdWFsPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKLy8gdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgb3JkZXJlZF9zZXQgPSB0cmVlPFQsIG51bGxfdHlwZSwgbGVzczxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47Cgp2ZWN0b3I8cGFpcjxpbnQsIGludD4+IGxvYzsKdmVjdG9yPHZlY3RvcjxpbnQ+PiBpbmQ7CmludCBuLCBtOwoKc3RydWN0IGRzdXsKICAgIHZlY3RvcjxpbnQ+IHA7CiAgICB2ZWN0b3I8aW50PiBtaW5paSwgbWF4aWksIG1pbmlqLCBtYXhpajsKICAgIHZvaWQgYnVpbGQoaW50IG4pewogICAgICAgIHAuYXNzaWduKG4sIC0xKTsKICAgICAgICBtaW5paS5hc3NpZ24obiwgMCk7CiAgICAgICAgbWluaWouYXNzaWduKG4sIDApOwoKICAgICAgICBtYXhpaS5hc3NpZ24obiwgMCk7CiAgICAgICAgbWF4aWouYXNzaWduKG4sIDApOwogICAgfQogICAgaW50IGdldChpbnQgdSl7CiAgICAgICAgcmV0dXJuIChwW3VdPDA/dTpwW3VdPWdldChwW3VdKSk7CiAgICB9CiAgICB2b2lkIG1lcmdlKGludCB1LCBpbnQgdil7CiAgICAgICAgaWYoKHU9Z2V0KHUpKT09KHY9Z2V0KHYpKSkgcmV0dXJuOwogICAgICAgIGlmKC1wW3VdPC1wW3ZdKSBzd2FwKHUsIHYpOwoKICAgICAgICBwW3VdKz1wW3ZdOwoKICAgICAgICBtaW5paVt1XXw9bWluaWlbdl07CiAgICAgICAgbWluaWpbdV18PW1pbmlqW3ZdOwoKICAgICAgICBtYXhpaVt1XXw9bWF4aWlbdl07CiAgICAgICAgbWF4aWpbdV18PW1heGlqW3ZdOwoKICAgICAgICBwW3ZdPXU7CiAgICB9Cn07CgovLyB2ZWN0b3I8dmVjdG9yPGJvb2w+PiB2aXM7CnZlY3Rvcjx2ZWN0b3I8aW50Pj4gYTsKCmRzdSBkMTsKCmludCBkeFs4XSA9IHstMSwgIDEsICAwLCAgMCwgLTEsIC0xLCAgMSwgIDF9OwppbnQgZHlbOF0gPSB7IDAsICAwLCAtMSwgIDEsIC0xLCAgMSwgLTEsICAxfTsKCmJvb2wgdmFsaWQoaW50IGksIGludCBqKXsKICAgIHJldHVybiAoaT49MCYmaTxuJiZqPj0wJiZqPG0pOwp9Cgp2b2lkIHNvbHZlKCl7CiAgICBjaW4+Pm4+Pm07CiAgICBhLmFzc2lnbihuLCB2ZWN0b3I8aW50PihtKSk7CiAgICBsb2MuYXNzaWduKG4qbSsxMCwgey0xLCAtMX0pOwogICAgaW5kLmFzc2lnbihuLCB2ZWN0b3I8aW50PihtKSk7CiAgICBkMS5idWlsZChuKm0rMTApOwogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKSBmb3IoaW50IGo9MDsgajxtOyBqKyspIGNpbj4+YVtpXVtqXTsKCiAgICBpbnQgY250cj0wOwogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKICAgICAgICBmb3IoaW50IGo9MDsgajxtOyBqKyspewogICAgICAgICAgICBsb2NbY250cl09e2ksIGp9OwogICAgICAgICAgICBpbmRbaV1bal09Y250cjsKICAgICAgICAgICAgY250cisrOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IoaW50IGk9MDsgaTxuOyBpKyspewogICAgICAgIGZvcihpbnQgaj0wOyBqPG07IGorKyl7CiAgICAgICAgICAgIGlmKGk9PTApewogICAgICAgICAgICAgICAgZDEubWluaWlbaW5kW2ldW2pdXT10cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGo9PTApewogICAgICAgICAgICAgICAgZDEubWluaWpbaW5kW2ldW2pdXT10cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGk9PW4tMSl7CiAgICAgICAgICAgICAgICBkMS5tYXhpaVtpbmRbaV1bal1dPXRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoaj09bS0xKXsKICAgICAgICAgICAgICAgIGQxLm1heGlqW2luZFtpXVtqXV09dHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmb3IoaW50IGk9MDsgaTxuOyBpKyspewogICAgICAgIGZvcihpbnQgaj0wOyBqPG07IGorKyl7CiAgICAgICAgICAgIGZvcihpbnQgaz0wOyBrPDg7IGsrKyl7CiAgICAgICAgICAgICAgICBpZih2YWxpZChpK2R5W2tdLCBqK2R4W2tdKSYmYVtpK2R5W2tdXVtqK2R4W2tdXT09YVtpXVtqXSl7CiAgICAgICAgICAgICAgICAgICAgZDEubWVyZ2UoaW5kW2ldW2pdLCBpbmRbaStkeVtrXV1baitkeFtrXV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKyl7CiAgICAgICAgbWFwPGludCwgaW50PiBtMTsKICAgICAgICBmb3IoaW50IGo9MDsgajxtOyBqKyspewogICAgICAgICAgICBpZihtMS5jb3VudChhW2ldW2pdKSkgewogICAgICAgICAgICAgICAgZDEubWVyZ2UoaW5kW2ldW2pdLCBtMVthW2ldW2pdXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG0xW2FbaV1bal1dPWluZFtpXVtqXTsKICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IGo9MDsgajxtOyBqKyspewogICAgICAgIG1hcDxpbnQsIGludD4gbTE7CiAgICAgICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKICAgICAgICAgICAgaWYobTEuY291bnQoYVtpXVtqXSkpIHsKICAgICAgICAgICAgICAgIGQxLm1lcmdlKGluZFtpXVtqXSwgbTFbYVtpXVtqXV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG0xW2FbaV1bal1dPWluZFtpXVtqXTsKICAgICAgICB9CiAgICB9CgogICAgdmVjdG9yPGludD4gdjE7CiAgICBmb3IoaW50IGk9MDsgaTxuOyBpKyspewogICAgICAgIGZvcihpbnQgaj0wOyBqPG07IGorKyl7CiAgICAgICAgICAgIGludCB2ZXJ0aXg9ZDEuZ2V0KGluZFtpXVtqXSk7CiAgICAgICAgICAgIGlmKGQxLm1pbmlqW3ZlcnRpeF0mJmQxLm1heGlqW3ZlcnRpeF0peyAvLyBsZWZ0IHJpZ2h0CiAgICAgICAgICAgICAgICB2MS5wYihhW2ldW2pdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihkMS5taW5palt2ZXJ0aXhdJiZkMS5taW5paVt2ZXJ0aXhdKXsgLy8gbGVmdCB0b3AKICAgICAgICAgICAgICAgIHYxLnBiKGFbaV1bal0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGQxLm1heGlpW3ZlcnRpeF0mJmQxLm1pbmlpW3ZlcnRpeF0peyAvLyBkb3duIHRvcAogICAgICAgICAgICAgICAgdjEucGIoYVtpXVtqXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoZDEubWF4aWlbdmVydGl4XSYmZDEubWF4aWpbdmVydGl4XSl7IC8vIGRvd24gcmlnaHQKICAgICAgICAgICAgICAgIHYxLnBiKGFbaV1bal0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHNvcnQodjEuYmVnaW4oKSwgdjEuZW5kKCkpOwoKICAgIGludCBtZXg9MDsKICAgIGZvcihpbnQgaT0wOyBpPHYxLnNpemUoKTsgaSsrKXsKICAgICAgICBpZih2MVtpXT09bWV4KSBtZXgrKzsKICAgIH0KICAgIGNvdXQ8PG1leDw8ZW5kbDsKfQoKaW50MzJfdCBtYWluKCkgewogICAgZmFzdDsKCiAgICBpbnQgdDsKICAgIHQ9MTsKICAgIGNpbj4+dDsKICAgIHdoaWxlKHQtLSl7CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIHJldHVybiAwOwp9