#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> //using namespace std; const int maxn = 1005; int max(int a, int b){ return a>b ? a:b; } int min(int a, int b){ return a<b ? a:b; } int up[maxn][maxn],left[maxn][maxn],right[maxn][maxn],maze[maxn][maxn],n,m; /* up[i][j] : the distance from (i,j) to (i-t,j) ,where (i-t,j) is the top free sapce (i,j) can straightly get there without crossing 'R' space; Let we call the line from (i,j) to (i-t,j) as "hanging line"; left[i][j] : the leftmost column position where the hanging line can splay to; right[i][j] : the rightmost column position where the hanging line can splay to; */ int main() { int T; scanf("%d",&T); while(T--){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ int ch=getchar(); while(ch!='F'&&ch!='R') ch=getchar(); maze[i][j] = ch=='F' ? 0 : 1; } for(int i=1;i<=n;i++){ int lo=0; for(int j=1;j<=m;j++){ if(maze[i][j]==1){ left[i][j] = up[i][j]=0; lo=j; } else { left[i][j]= i==1 ? lo+1:max(lo+1,left[i-1][j]); up[i][j]= i==1 ? 1 : up[i-1][j]+1; } } } int ans=0; for(int i=1;i<=n;i++){ int ro=m+1; for(int j=m;j>=1;j--){ if(maze[i][j]==1){ right[i][j] = m; ro=j; } else { right[i][j] = i==1 ? ro-1 : min(ro-1 , right[i-1][j]); } ans=max(ans,(right[i][j]-left[i][j]+1)*up[i][j]); } } printf("%d\n",ans*3); } return 0; }