#include<iostream>
#include<cstdio>
using namespace std;
int n,m,cnt,ans,q[101010][2],bok[1010][1010],dep[1010][1010];
int f[1010],ma[1010],fir[101010],nxt[202020],to[202020];
int fl[4][2]={{0,-1},{0,1},{1,0},{-1,0}};
char s[1010][1010];
int id(int x,int y){ return (x-1)*m+y;}
int bfs(int x,int y)
{
	int fr=0,b=0;
	q[++b][0]=x;q[b][1]=y;bok[x][y]=1;dep[x][y]=0;
	while(fr<b)
	{
		x=q[++fr][0],y=q[fr][1];
		for(int i=0;i<=3;i++)
		{
			int xx=x+fl[i][0],yy=y+fl[i][1];
			if(xx<1||xx>n||yy<1||yy>m||bok[xx][yy]||s[xx][yy]=='#') continue;
			q[++b][0]=xx;q[b][1]=yy;
			bok[xx][yy]=1;dep[xx][yy]=dep[x][y]+1;
		}
	}
	for(int i=1;i<=b;i++)
	bok[q[i][0]][q[i][1]]=0;
	return dep[q[b][0]][q[b][1]];
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	scanf("%s",s[i]+1);
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
	if(s[i][j]=='.')
		ans=max(ans,bfs(i,j));
	printf("%d\n",ans);
	return 0;
}