#include<bits/stdc++.h>
using namespace std;
int n,m,s,i,j,k,p[21][21],ax[5]={0,1,-1,0,0},ay[5]={0,0,0,1,-1},px,py;
bool a[21][21],f[21][21];
struct fun
{
	int x,y;
};
queue<fun> q;
void bfs()
{
	memset(f,1,sizeof(f));
	memset(p,0,sizeof(p));
	q.push((fun){i,j});
	f[i][j]=0;
	while(!q.empty())
	{
		fun l=q.front();
		q.pop();
		for(k=1;k<5;k++)
		{
			px=l.x+ax[k];
			py=l.y+ay[k];
			if(px<=n&&py<=m&&px>0&&py>0&&a[px][py]&&f[px][py]) 
			{
				p[px][py]=p[l.x][l.y]+1;
				s=max(s,p[px][py]);
				q.push((fun){px,py});
				f[px][py]=0;
			}	
		}
	}
}
int main()
{
	char w;
	cin>>n>>m;
	for(i=1;i<=n;i++)
	  for(j=1;j<=m;j++)
	  {
	  	cin>>w;
	  	if(w=='.') a[i][j]=1;
	  	else a[i][j]=0;
	  }
	for(i=1;i<=n;i++)
	  for(j=1;j<=m;j++)
	    if(a[i][j]) bfs();
	cout<<s;
    return 0;
}