#include<bits/stdc++.h>
using namespace std;
#define ll long long
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
int lcm(int a, int b) {
return (a == 0 || b == 0) ? 0 : (a / gcd(a, b)) * b;
}
vector<vector<int>> directions = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
vector<string> graph;
vector<vector<int>> vis;
int cc, rmx, rmn, cmx, cmn;
void dfs(int r, int c) {
if (vis[r][c] || graph[r][c] == '.') {
return;
}
vis[r][c] = 1;
cc++;
rmx = max(rmx, r);
rmn = min(rmn, r);
cmx = max(cmx, c);
cmn = min(cmn, c);
for (auto dir : directions) {
int nr = r + dir[0];
int nc = c + dir[1];
if (nr >= 0 && nr < graph.size() && nc >= 0 && nc < graph[0].size()) {
dfs(nr, nc);
}
}
}
int main() {
int t;
cin >> t;
while (t--) {
int n, m;
cin >> n >> m;
graph.assign(n, "");
vis.assign(n, vector<int>(m, 0));
vector<int> emr(n, 0), emc(m, 0);
for (int i = 0; i < n; i++) {
cin >> graph[i];
for (int j = 0; j < m; j++) {
if (graph[i][j] == '.') {
emr[i]++;
emc[j]++;
}
}
}
vector<int> mpr(n + 1, 0), mpc(m + 1, 0);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (vis[i][j] || graph[i][j] == '.') continue;
cc = 0;
rmx = rmn = i;
cmx = cmn = j;
dfs(i, j);
rmn = max(rmn - 1, 0);
rmx = min(rmx + 1, n - 1);
cmn = max(cmn - 1, 0);
cmx = min(cmx + 1, m - 1);
mpr[rmn] += cc;
mpr[rmx + 1] -= cc;
mpc[cmn] += cc;
mpc[cmx + 1] -= cc;
}
}
int ans = INT_MIN;
for (int i = 0; i < n; i++) {
if (i > 0) mpr[i] += mpr[i - 1];
ans = max(ans, mpr[i] + emr[i]);
}
for (int i = 0; i < m; i++) {
if (i > 0) mpc[i] += mpc[i - 1];
ans = max(ans, mpc[i] + emc[i]);
}
cout << ans << endl;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcgCiAKaW50IGdjZChpbnQgYSwgaW50IGIpIHsKICAgIHJldHVybiBiID09IDAgPyBhIDogZ2NkKGIsIGEgJSBiKTsKfQogCmludCBsY20oaW50IGEsIGludCBiKSB7CiAgICByZXR1cm4gKGEgPT0gMCB8fCBiID09IDApID8gMCA6IChhIC8gZ2NkKGEsIGIpKSAqIGI7Cn0KIAp2ZWN0b3I8dmVjdG9yPGludD4+IGRpcmVjdGlvbnMgPSB7ezEsIDB9LCB7LTEsIDB9LCB7MCwgMX0sIHswLCAtMX19Owp2ZWN0b3I8c3RyaW5nPiBncmFwaDsKdmVjdG9yPHZlY3RvcjxpbnQ+PiB2aXM7CiAKaW50IGNjLCBybXgsIHJtbiwgY214LCBjbW47CiAKdm9pZCBkZnMoaW50IHIsIGludCBjKSB7CiAgICBpZiAodmlzW3JdW2NdIHx8IGdyYXBoW3JdW2NdID09ICcuJykgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIHZpc1tyXVtjXSA9IDE7CiAgICBjYysrOwogICAgcm14ID0gbWF4KHJteCwgcik7CiAgICBybW4gPSBtaW4ocm1uLCByKTsKICAgIGNteCA9IG1heChjbXgsIGMpOwogICAgY21uID0gbWluKGNtbiwgYyk7CiAKICAgIGZvciAoYXV0byBkaXIgOiBkaXJlY3Rpb25zKSB7CiAgICAgICAgaW50IG5yID0gciArIGRpclswXTsKICAgICAgICBpbnQgbmMgPSBjICsgZGlyWzFdOwogICAgICAgIGlmIChuciA+PSAwICYmIG5yIDwgZ3JhcGguc2l6ZSgpICYmIG5jID49IDAgJiYgbmMgPCBncmFwaFswXS5zaXplKCkpIHsKICAgICAgICAgICAgZGZzKG5yLCBuYyk7CiAgICAgICAgfQogICAgfQp9CiAKaW50IG1haW4oKSB7CiAgICAKIAogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBpbnQgbiwgbTsKICAgICAgICBjaW4gPj4gbiA+PiBtOwogICAgICAgIGdyYXBoLmFzc2lnbihuLCAiIik7CiAgICAgICAgdmlzLmFzc2lnbihuLCB2ZWN0b3I8aW50PihtLCAwKSk7CiAgICAgICAgdmVjdG9yPGludD4gZW1yKG4sIDApLCBlbWMobSwgMCk7CiAKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICBjaW4gPj4gZ3JhcGhbaV07CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgICAgICAgICBpZiAoZ3JhcGhbaV1bal0gPT0gJy4nKSB7CiAgICAgICAgICAgICAgICAgICAgZW1yW2ldKys7CiAgICAgICAgICAgICAgICAgICAgZW1jW2pdKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICB2ZWN0b3I8aW50PiBtcHIobiArIDEsIDApLCBtcGMobSArIDEsIDApOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgICAgICAgICBpZiAodmlzW2ldW2pdIHx8IGdyYXBoW2ldW2pdID09ICcuJykgY29udGludWU7CiAgICAgICAgICAgICAgICBjYyA9IDA7CiAgICAgICAgICAgICAgICBybXggPSBybW4gPSBpOwogICAgICAgICAgICAgICAgY214ID0gY21uID0gajsKICAgICAgICAgICAgICAgIGRmcyhpLCBqKTsKIAogICAgICAgICAgICAgICAgcm1uID0gbWF4KHJtbiAtIDEsIDApOwogICAgICAgICAgICAgICAgcm14ID0gbWluKHJteCArIDEsIG4gLSAxKTsKICAgICAgICAgICAgICAgIGNtbiA9IG1heChjbW4gLSAxLCAwKTsKICAgICAgICAgICAgICAgIGNteCA9IG1pbihjbXggKyAxLCBtIC0gMSk7CiAgICAgICAgICAgICAgICBtcHJbcm1uXSArPSBjYzsKICAgICAgICAgICAgICAgIG1wcltybXggKyAxXSAtPSBjYzsKICAgICAgICAgICAgICAgIG1wY1tjbW5dICs9IGNjOwogICAgICAgICAgICAgICAgbXBjW2NteCArIDFdIC09IGNjOwogICAgICAgICAgICB9CiAgICAgICAgfQogCiAgICAgICAgaW50IGFucyA9IElOVF9NSU47CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgPiAwKSBtcHJbaV0gKz0gbXByW2kgLSAxXTsKICAgICAgICAgICAgYW5zID0gbWF4KGFucywgbXByW2ldICsgZW1yW2ldKTsKICAgICAgICB9CiAKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgICAgICBpZiAoaSA+IDApIG1wY1tpXSArPSBtcGNbaSAtIDFdOwogICAgICAgICAgICBhbnMgPSBtYXgoYW5zLCBtcGNbaV0gKyBlbWNbaV0pOwogICAgICAgIH0KIAogICAgICAgIGNvdXQgPDwgYW5zIDw8IGVuZGw7CiAgICB9Cn0=