#include <algorithm>
#include <iomanip>
#include <iostream>
#include <vector>
#include <set>
#include <numeric>
#include <map>
#include <unordered_map>
using namespace std;
#define all(a) a.begin(), a.end()
#define ll long long
#define fo(i,n) for (long long i = 0; i < n; i++)
bool comp(pair<char,ll> a, pair<char,ll> b)
{
return (a.first < b.first);
}
bool comp2(pair<char,ll> a, pair<char,ll> b)
{
return (a.first > b.first);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
ll n,m,i;
ll a,b;
string input;
cin >> i;
while (i--)
{
cin >> n >> m;
ll res = 0;
map<ll,ll> freq;
vector<vector<ll>> nums(n,vector<ll>(m,0));
set<ll> num;
fo(j,n)
{
fo(k,m)
{
cin >> a;
nums[j][k] = a;
num.insert(a);
if (j > 0)
{
if (nums[j-1][k] == a)
{
freq[a]++;
}
}
if (k > 0)
{
if (nums[j][k-1] == a)
{
freq[a]++;
}
}
}
}
ll maxi = 0;
for (auto k : num)
{
if (freq[k] > maxi)
{
maxi = freq[k];
if (maxi > 1)
{
maxi = 1;
}
}
}
for (auto k : num)
{
ll bruh = 2;
res+= min(freq[k]+1,bruh);
}
cout << res-(maxi+1) << '\n';
}
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvbWFuaXA+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPG51bWVyaWM+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksIGEuZW5kKCkKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBmbyhpLG4pIGZvciAobG9uZyBsb25nIGkgPSAwOyBpIDwgbjsgaSsrKQpib29sIGNvbXAocGFpcjxjaGFyLGxsPiBhLCBwYWlyPGNoYXIsbGw+IGIpCnsKICAgIHJldHVybiAoYS5maXJzdCA8IGIuZmlyc3QpOwp9CmJvb2wgY29tcDIocGFpcjxjaGFyLGxsPiBhLCBwYWlyPGNoYXIsbGw+IGIpCnsKICAgIHJldHVybiAoYS5maXJzdCA+IGIuZmlyc3QpOwp9CmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGxsIG4sbSxpOwogICAgbGwgYSxiOwogICAgc3RyaW5nIGlucHV0OwogICAgY2luID4+IGk7CiAgICB3aGlsZSAoaS0tKQogICAgewogICAgICAgIGNpbiA+PiBuID4+IG07CiAgICAgICAgbGwgcmVzID0gMDsKICAgICAgICBtYXA8bGwsbGw+IGZyZXE7CiAgICAgICAgdmVjdG9yPHZlY3RvcjxsbD4+IG51bXMobix2ZWN0b3I8bGw+KG0sMCkpOwogICAgICAgIHNldDxsbD4gbnVtOwogICAgICAgIGZvKGosbikKICAgICAgICB7CiAgICAgICAgICAgIGZvKGssbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2luID4+IGE7CiAgICAgICAgICAgICAgICBudW1zW2pdW2tdID0gYTsKICAgICAgICAgICAgICAgIG51bS5pbnNlcnQoYSk7CiAgICAgICAgICAgICAgICBpZiAoaiA+IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG51bXNbai0xXVtrXSA9PSBhKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZnJlcVthXSsrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChrID4gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAobnVtc1tqXVtrLTFdID09IGEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBmcmVxW2FdKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxsIG1heGkgPSAwOwogICAgICAgIGZvciAoYXV0byBrIDogbnVtKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGZyZXFba10gPiBtYXhpKQogICAgICAgICAgICB7CiAgICAgICAgICAgIAltYXhpID0gZnJlcVtrXTsKICAgICAgICAgICAgCWlmIChtYXhpID4gMSkKICAgICAgICAgICAgCXsKICAgICAgICAgICAgCQltYXhpID0gMTsKICAgICAgICAgICAgCX0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGF1dG8gayA6IG51bSkKICAgICAgICB7CiAgICAgICAgCWxsIGJydWggPSAyOwogICAgICAgIAlyZXMrPSBtaW4oZnJlcVtrXSsxLGJydWgpOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IHJlcy0obWF4aSsxKSA8PCAnXG4nOwogICAgfQp9