#include <bits/stdc++.h>
int dis[410][410],i,j,n,m,k,l,o,ans;
char map[22][22];
int b[4][2]={0,1,1,0,0,-1,-1,0};
int main()
{
	scanf("%d%d\n",&n,&m);
	for (i=1;i<=n;i++)
	{
		for (j=1;j<=m;j++)
		scanf("%c",&map[i][j]);
		scanf("\n");
	}
	for (i=1;i<=n*m;i++)
	 for (j=1;j<=n*m;j++)
	  if (i!=j) dis[i][j]=0x7f7f7f7f/3;
	for (i=1;i<=n;i++)
	 for (j=1;j<=m;j++)
	  if (map[i][j]=='.')
	  {
	  	int x=(i-1)*m+j;
	  	for (k=0;k<4;k++)
	  	{
	  		int xx,yy;
	  		xx=i+b[k][0];yy=j+b[k][1];
	  		if (map[xx][yy]=='.')
	  		{
	  			int y=(xx-1)*m+yy;
	  			dis[x][y]=1;
			}
		}
	  }
	for (k=1;k<=n*m;k++)
	 for (i=1;i<=n*m;i++)
	  for (j=1;j<=n*m;j++)
	   dis[i][j]=std::min(dis[i][j],dis[i][k]+dis[k][j]);
	for (i=1;i<=n*m;i++)
	 for (j=1;j<=n*m;j++)
	  if (dis[i][j]<=n*m) ans=std::max(ans,dis[i][j]);
	printf("%d",ans); 
}