#include<bits/stdc++.h>
using namespace std;
int mx[4]={0,1,0,-1},my[4]={1,0,-1,0};
int h,w,ans=-1;string s[30];bool vis[30][30];
void bfs(int x,int y)
{
	queue<pair<pair<int,int>,int> >q;
	q.push(make_pair(make_pair(x,y),0));
	vis[x][y]=1;
	while(!q.empty())
	{
		pair<int,int> p=q.front().first;
		int d=q.front().second;q.pop();
		for(int i=0;i<4;++i)
		{
			int xx=p.first+mx[i];
			int yy=p.second+my[i];
			if(xx<0||yy<0||xx>=h||yy>=w||vis[xx][yy]||s[xx][yy]=='#') continue;
			vis[xx][yy]=1;ans=max(ans,d+1);
			q.push(make_pair(make_pair(xx,yy),d+1));
		}
	}
}
int main()
{
	cin>>h>>w;
	for(int i=0;i<h;++i)
	 cin>>s[i];
	for(int i=0;i<h;++i)
	 for(int j=0;j<w;++j)
	  if(s[i][j]=='.')
	  {
	  	memset(vis,0,sizeof(vis));
		bfs(i,j);
	  }
	cout<<ans;
	return 0;
}