#include <stdio.h>#include <stdlib.h>#include <string.h>char Maps[ 1003 ][ 1003 ];int MaxH[ 1003 ][ 1003 ];int L[ 1003 ],R[ 1003 ];int MUQ[ 1003 ];int main(){ int t,m,n; while ( scanf("%d",&t) != EOF ) while ( t -- ) { scanf("%d%d",&m,&n);getchar(); for ( int i = 1 ; i <= m ; ++ i ) for ( int j = 1 ; j <= n ; ++ j ) { scanf("%c",&Maps[ i ][ j ]); getchar(); } memset( MaxH, 0, sizeof( MaxH ) ); for ( int i = 1 ; i <= m ; ++ i ) for ( int j = 1 ; j <= n ; ++ j ) if ( Maps[ i ][ j ] == 'F' ) MaxH[ i ][ j ] = MaxH[ i-1 ][ j ]+1; else MaxH[ i ][ j ] = 0; for ( int i = 1 ; i <= m ; ++ i ) MaxH[ i ][ 0 ] = MaxH[ i ][ n+1 ] = -1; int MaxV = 0; for ( int i = 1 ; i <= m ; ++ i ) { int tail = 0; MUQ[ 0 ] = 0; for ( int j = 1 ; j <= n+1 ; ++ j ) { while ( tail >= 0 && MaxH[ i ][ MUQ[ tail ] ] > MaxH[ i ][ j ] ) R[ MUQ[ tail -- ] ] = j; MUQ[ ++ tail ] = j; } tail = 0; MUQ[ 0 ] = n+1; for ( int j = n ; j >= 0 ; -- j ) { while ( tail >= 0 && MaxH[ i ][ MUQ[ tail ] ] > MaxH[ i ][ j ] ) L[ MUQ[ tail -- ] ] = j; MUQ[ ++ tail ] = j; } for ( int j = 1 ; j <= n ; ++ j ) { int Temp = MaxH[ i ][ j ]*(R[ j ]-L[ j ]-1); if ( MaxV < Temp ) MaxV = Temp; } } printf("%dn",MaxV*3); } return 0;}