#include <bits/stdc++.h>
using namespace std;
#define N 25
#define set(a,v) memset(a,v,sizeof(a))
const int X[4]={1,-1,0,0},Y[4]={0,0,1,-1}; 
int n,m,ans,dst[N][N];bool vs[N][N];char a[N][N];queue<int> qX,qY;
int max(int x,int y) {return x>y?x:y;}
void bfs(int sX,int sY)
{
	set(dst,0);set(vs,0);vs[sX][sY]=1;qX.push(sX);qY.push(sY);
	while(!qX.empty())
	{
		int x=qX.front(),y=qY.front();qX.pop();qY.pop(); 
		for(int i=0,gX,gY;i<4;++i)
		{
			gX=x+X[i];gY=y+Y[i];
			if(gX>0 && gX<=n && gY>0 && gY<=m && a[gX][gY]=='.' && !vs[gX][gY])
				vs[gX][gY]=1,dst[gX][gY]=dst[x][y]+1,qX.push(gX),qY.push(gY);
		}
	}for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) ans=max(ans,dst[i][j]);
}
int main()
{
	scanf("%d %d",&n,&m);for(int i=1;i<=n;++i) scanf("%s",a[i]+1);
	for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) if(a[i][j]=='.') bfs(i,j);
	printf("%d\n",ans);return 0;
}