#include <bits/stdc++.h>
using namespace std;
#define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);
using ll = long long;
int main() {
FAST;
int tc = 1, ti;
cin >> tc;
for (ti = 1; ti <= tc; ++ti) {
ll n, m, i, j, k, ans, curr;
cin >> n >> m;
vector<string> a(n);
for (i = 0; i < n; ++i) cin >> a[i];
vector<vector<ll>> pf(n, vector<ll>(m));
vector<vector<ll>> sf(n, vector<ll>(m));
for (j = 0; j < m; ++j) {
pf[0][j] = 1;
for (i = 1; i < n; ++i) {
if (a[i][j] == a[i-1][j]) pf[i][j] = pf[i-1][j] + 1;
else pf[i][j] = 1;
}
for (i = 1; i < n; ++i) pf[i][j] = max(pf[i][j], pf[i-1][j]);
sf[n-1][j] = 1;
for (i = n-2; i >= 0; --i) {
if (a[i][j] == a[i+1][j]) sf[i][j] = sf[i+1][j] + 1;
else sf[i][j] = 1;
}
for (i = n-2; i >= 0; --i) sf[i][j] = max(sf[i][j], sf[i+1][j]);
}
ans = 0;
for (j = 0; j < m; ++j) ans += pf[n-1][j];
for (i = 0; i < n-1; ++i) {
curr = 0;
for (j = 0; j < m; ++j) curr += max(pf[n-1][j], pf[i][j] + sf[i+1][j]);
ans = max(ans, curr);
}
vector<vector<ll>> L(m, vector<ll>(26, 0));
vector<vector<ll>> R(m, vector<ll>(26, 0));
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
for (k = 0; k < 26; ++k) {
if (a[i][j] == (char)'a'+k) R[j][k] += 1;
}
}
}
ans = 0;
for (j = 0; j < m; ++j) {
ans += *max_element(R[j].begin(), R[j].end());
}
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
for (k = 0; k < 26; ++k) {
if (a[i][j] == (char)'a'+k) {
L[j][k] += 1;
R[j][k] -= 1;
}
}
}
curr = 0;
for (j = 0; j < m; ++j) {
curr += *max_element(L[j].begin(), L[j].end());
curr += *max_element(R[j].begin(), R[j].end());
}
ans = max(ans, curr);
}
cout << ans << "\n";
}
return 0;
}