#include <bits/stdc++.h>
using namespace std;
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
#ifdef SUBLIME
freopen("inputf.in", "r", stdin);
freopen("outputf.out", "w", stdout);
freopen("error.txt", "w", stderr);
#endif
int tt;
cin >> tt;
while (tt--) {
int n, m;
cin >> n >> m;
vector <vector <char>> v(n, vector <char>(m));
for (auto &x : v) for (auto &y : x) cin >> y;
int u[n][m], d[n][m], l[n][m], r[n][m];
for (int i = 0; i < n; i++) {
l[i][0] = 0;
for (int j = 1; j < m; j++) {
if (v[i][j - 1] == '+' && v[i][j] == '+') l[i][j] = l[i][j - 1] + 1;
else l[i][j] = 0;
}
r[i][m - 1] = 0;
for (int j = m - 2; j >= 0; j--) {
if (v[i][j] == '+' && v[i][j + 1] == '+') r[i][j] = r[i][j + 1] + 1;
else r[i][j] = 0;
}
}
for (int j = 0; j < m; j++) {
u[n - 1][j] = 0;
for (int i = n - 2; i >= 0; i--) {
if (v[i][j] == '+' && v[i + 1][j] == '+') u[i][j] = u[i + 1][j] + 1;
else u[i][j] = 0;
}
d[0][j] = 0;
for (int i = 1; i < n; i++) {
if (v[i][j] == '+' && v[i - 1][j] == '+') d[i][j] = d[i - 1][j] + 1;
else d[i][j] = 1;
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (v[i][j] == '-') continue;
ans = max(ans, 1 + 4 * min({u[i][j], d[i][j], l[i][j], r[i][j]}));
}
}
cout << ans << "\n";
}
return 0;
}