#include<bits/stdc++.h>
#define pii pair<int,int>
#define F first
#define S second
#define mp make_pair
using namespace std;
const int N=25;
queue<pii>q;
char c[N][N];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int dist[N][N],ans,n,m;
void bfs(int x,int y)
{
	q.push(mp(x,y));for(int i=0;i<N;i++)for(int j=0;j<N;j++)dist[i][j]=-1;
	dist[x][y]=0;
	while(!q.empty())
	{
		x=q.front().F;
		y=q.front().S;
		q.pop();
//		cout<<x<<' '<<y<<endl;
		ans=max(ans,dist[x][y]);
		for(int i=0;i<4;i++)
		{
			int x2=x+dx[i];
			int y2=y+dy[i];
			if(x2<0||y2<0||x2>=n||y2>=m||c[x2][y2]=='#')continue;
			if(dist[x2][y2]==-1)
			{
				dist[x2][y2]=dist[x][y]+1;
				q.push(mp(x2,y2));
			}
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		cin>>c[i];
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(c[i][j]!='#')
			bfs(i,j);
		}
	}
	cout<<ans<<endl;
	return 0;
}