#include<bits/stdc++.h>
#define int long long 
using namespace std;

int32_t main()
{
	int n,m;
	cin>>n>>m;

	char arr[n][m];
	for (int i=0;i<n;i++)
		for (int j=0;j<m;j++) cin>>arr[i][j];

	int nm=n*m;
	int dist[nm+1][nm+1];
	for (int i=0;i<=nm;i++)
		for (int j=0;j<=nm;j++)dist[i][j]=INT_MAX;

	for (int i=0;i<=nm;i++)
			dist[i][i]=0;

	int dirx[]={1,-1,0,0};
	int diry[]={0,0,1,-1};

	for (int i=0;i<n;i++){
		for (int j=0;j<m;j++){
			if (arr[i][j]=='#') continue;
			for (int dir=0;dir<4;dir++){
				int newx = i+dirx[dir];
				int newy = j+diry[dir];
				if (newx>=0 && newy>=0 && newx<n && newy<m && arr[newx][newy]!='#'){
						dist[m*i+j+1][m*newx+newy+1]=1;
				}
			}
		}
	}

	for (int k=1;k<=nm;k++)
	for (int i=1;i<=nm;i++)
	for (int j=1;j<=nm;j++){

		dist[i][j] = min(dist[i][k]+dist[k][j],dist[i][j]);

	}

	int ans=0;

	for (int i=1;i<=nm;i++){
		for (int j=1;j<=nm;j++){
			if (dist[i][j]==INT_MAX) continue;
			ans=max(ans,dist[i][j]);
		}
	}

	cout<<ans<<'\n';
}
