#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
struct data{
int x,y,cnt;
};
queue<data>q;
data p,f;
int n,m,vis[1000][1000],s[1000][1000],xx,yy,ans;
void bfs(int a,int b,int c){
vis[a][b]=c;
p.x=a;p.y=b;
p.cnt=0;
while(!q.empty())q.pop();
q.push(p);
while(!q.empty()){
p=q.front();
q.pop();
for(int i=0;i<4;i++){
f.x=p.x+dir[i][0];
f.y=p.y+dir[i][1];
if(f.x<0||f.y<0||f.x>=m||f.y>=n)continue;
if(s[f.x][f.y]==0&&vis[f.x][f.y]!=c){
vis[f.x][f.y]=c;
f.cnt=p.cnt+1;
if(ans<f.cnt){
ans=f.cnt;
xx=f.x;
yy=f.y;
//printf("%d %d\n",xx,yy);
}
q.push(f);
}
}
}
//printf("%d\n",ans);
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
memset(vis,0,sizeof(vis));
char ch;
ans=0;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
scanf(" %c",&ch);
if(ch=='.')s[i][j]=0;
else s[i][j]=1;
}
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(s[i][j]==0&&vis[i][j]==0)
bfs(i,j,1);
bfs(xx,yy,2);
printf("Maximum rope length is %d.\n",ans);
}
return 0;
}