#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long int
#define ld long double
#define all(x) x.begin(), x.end()
#define sortall(x) sort(all(x))
#define endl '\n'
#define yes cout<<"YES\n";
#define no cout<<"NO\n";
#define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
/*
* Think twice, code once
* Think of different approaches to tackle a problem: write them down.
* Think of different views of the problem. don't look from only one side.
* don't get stuck in one approach.
* common mistakes: - over_flow
* - out_of_bound index
* - infinite loop
* - corner cases
* - duplication counting.
*/
void solve()
{
int n, m; cin >> n >> m;
vector<vector<int>> v(n+2, vector<int>(m+2));
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m; ++j)
{
cin >> v[i][j];
}
}
map<int, int> mp1;
map<int, int> mp2;
bool flag = false;
int cnt = INT_MAX, num = 0;
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m; ++j)
{
if (mp1.count(v[i][j]) == 0)
{
mp1[v[i][j]]++;
}else
{
if (v[i][j] != v[i-1][j] && v[i][j] != v[i][j-1] && v[i][j] != v[i+1][j] && v[i][j] != v[i][j+1])
{
mp1[v[i][j]]++;
}else
{
mp2[v[i][j]]++;
}
}
}
}
for (auto&i:mp1)
{
// cout << i.first << ' ' << i.second << '\n';
if (mp1.count(i.first) && mp2.count(i.first) )
{
num = i.first;
cnt = i.second;
flag = true;
}
}
int ans = 0;
if (flag)
{
for (auto&i:mp1)
{
if (i.first != num)
ans++;
}
for (auto&i:mp2)
{
if (i.first != num)
ans++;
}
cout << ans;
}else
{
for (auto&i:mp1)
{
if (i.first != num)
ans++;
}
for (auto&i:mp2)
{
if (i.first != num)
ans++;
}
cout << ans-1;
}
}
int32_t main()
{
// fast
int t = 1;
cin >> t;
while (t--)
{
solve();
if (t) cout << '\n';
}
cout << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgaW50IGxvbmcgbG9uZyBpbnQKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSBzb3J0YWxsKHgpIHNvcnQoYWxsKHgpKQojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIHllcyBjb3V0PDwiWUVTXG4iOwojZGVmaW5lIG5vIGNvdXQ8PCJOT1xuIjsKI2RlZmluZSBmYXN0IGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKLyoKICogVGhpbmsgdHdpY2UsIGNvZGUgb25jZQogKiBUaGluayBvZiBkaWZmZXJlbnQgYXBwcm9hY2hlcyB0byB0YWNrbGUgYSBwcm9ibGVtOiB3cml0ZSB0aGVtIGRvd24uCiAqIFRoaW5rIG9mIGRpZmZlcmVudCB2aWV3cyBvZiB0aGUgcHJvYmxlbS4gZG9uJ3QgbG9vayBmcm9tIG9ubHkgb25lIHNpZGUuCiAqIGRvbid0IGdldCBzdHVjayBpbiBvbmUgYXBwcm9hY2guCiAqIGNvbW1vbiBtaXN0YWtlczogLSBvdmVyX2Zsb3cKICogICAgICAgICAgICAgICAgICAtIG91dF9vZl9ib3VuZCBpbmRleAogKiAgICAgICAgICAgICAgICAgIC0gaW5maW5pdGUgbG9vcAogKiAgICAgICAgICAgICAgICAgIC0gY29ybmVyIGNhc2VzCiAqICAgICAgICAgICAgICAgICAgLSBkdXBsaWNhdGlvbiBjb3VudGluZy4KKi8KCnZvaWQgc29sdmUoKQp7CiAgICBpbnQgbiwgbTsgY2luID4+IG4gPj4gbTsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gdihuKzIsIHZlY3RvcjxpbnQ+KG0rMikpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKQogICAgewogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG07ICsraikKICAgICAgICB7CiAgICAgICAgICAgIGNpbiA+PiB2W2ldW2pdOwogICAgICAgIH0KICAgIH0KICAgIG1hcDxpbnQsIGludD4gbXAxOwogICAgbWFwPGludCwgaW50PiBtcDI7CiAgICBib29sIGZsYWcgPSBmYWxzZTsKICAgIGludCBjbnQgPSBJTlRfTUFYLCBudW0gPSAwOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKQogICAgewogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG07ICsraikKICAgICAgICB7CiAgICAgICAgICAgIGlmIChtcDEuY291bnQodltpXVtqXSkgPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXAxW3ZbaV1bal1dKys7CiAgICAgICAgICAgIH1lbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICh2W2ldW2pdICE9IHZbaS0xXVtqXSAmJiB2W2ldW2pdICE9IHZbaV1bai0xXSAmJiB2W2ldW2pdICE9IHZbaSsxXVtqXSAmJiB2W2ldW2pdICE9IHZbaV1baisxXSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtcDFbdltpXVtqXV0rKzsKICAgICAgICAgICAgICAgIH1lbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXAyW3ZbaV1bal1dKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBmb3IgKGF1dG8maTptcDEpCiAgICB7CiAgICAgICAgLy8gY291dCA8PCBpLmZpcnN0IDw8ICcgJyA8PCBpLnNlY29uZCA8PCAnXG4nOwogICAgICAgIGlmIChtcDEuY291bnQoaS5maXJzdCkgJiYgbXAyLmNvdW50KGkuZmlyc3QpICkKICAgICAgICB7CiAgICAgICAgICAgIG51bSA9IGkuZmlyc3Q7CiAgICAgICAgICAgIGNudCA9IGkuc2Vjb25kOwogICAgICAgICAgICBmbGFnID0gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICBpbnQgYW5zID0gMDsKICAgIGlmIChmbGFnKQogICAgewogICAgICAgIGZvciAoYXV0byZpOm1wMSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChpLmZpcnN0ICE9IG51bSkKICAgICAgICAgICAgICAgIGFucysrOwogICAgICAgIH0KICAgICAgICBmb3IgKGF1dG8maTptcDIpCiAgICAgICAgewogICAgICAgICAgICBpZiAoaS5maXJzdCAhPSBudW0pCiAgICAgICAgICAgICAgICBhbnMrKzsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBhbnM7CiAgICB9ZWxzZQogICAgewogICAgICAgIGZvciAoYXV0byZpOm1wMSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChpLmZpcnN0ICE9IG51bSkKICAgICAgICAgICAgICAgIGFucysrOwogICAgICAgIH0KICAgICAgICBmb3IgKGF1dG8maTptcDIpCiAgICAgICAgewogICAgICAgICAgICBpZiAoaS5maXJzdCAhPSBudW0pCiAgICAgICAgICAgICAgICBhbnMrKzsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBhbnMtMTsKICAgIH0KfQoKaW50MzJfdCBtYWluKCkKewogICAgLy8gZmFzdAogICAgaW50IHQgPSAxOwogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKQogICAgewogICAgICAgIHNvbHZlKCk7CiAgICAgICAgaWYgKHQpIGNvdXQgPDwgJ1xuJzsKICAgIH0KICAgIGNvdXQgPDwgJ1xuJzsKICAgIHJldHVybiAwOwp9