#include <bits/stdc++.h>
#include <cmath>
#include <bitset>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
#define ll long long int
#define lld long double
#define yes cout << "Yes" << endl
#define no cout << "No" << endl
#define gcd(a, b) __gcd(a, b)
#define lcm(a, b) ((a * b) / gcd(a, b))
#define pi acos(-1.00)
void evan(int t)
{
ll n,m;cin>>n>>m;
char a[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
vector<vector<vector<ll>>>v(n,vector<vector<ll>>(m,vector<ll>(26,0)));
for(int j=0;j<m;j++){
for(int i=0;i<n;i++){
for(int k=0;k<26;k++){
if(k==a[i][j]-'a'){
if(i!=0)v[i][j][k]=v[i-1][j][k]+1;
else v[i][j][k]=1;
}
else{
if(i!=0) v[i][j][k]=v[i-1][j][k];
else v[i][j][k]=0;
}
}
}
}
ll ans=-1;
for(int i=0;i<n;i++){
ll temp=0;
for(int j=0;j<m;j++){
ll maxx1=-1;
for(int k=0;k<26;k++){
if(v[i][j][k]>maxx1)maxx1=v[i][j][k];
}
ll maxx2=-1;
for(int k=0;k<26;k++){
if(v[n-1][j][k]-v[i][j][k]>maxx2)maxx2=v[n-1][j][k]-v[i][j][k];
}
temp+=maxx1+maxx2;
}
ans=max(ans,temp);
}
cout<<ans<<"\n";
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(nullptr);
int t = 1;
cin >> t;
for (int i = 1; i <= t; i++)
{
evan(i);
}
}