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

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

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 ans=0;
	for (int i=0;i<n;i++){
		for (int j=0;j<m;j++){
			if (arr[i][j]=='#') continue;

			//Choose Start Node
			queue<pair<int,pair<int,int>>>q;
			q.push({0,{i,j}});

			bool vis[n][m];
			for (int i=0;i<n;i++)
			for (int j=0;j<m;j++) vis[i][j]=0;
			vis[i][j]=1;

			while (!q.empty()){
				auto y = q.front();
				q.pop();

				ans=max(ans,y.first);

				for (int dir=0;dir<4;dir++){
					int newx = y.second.first + dirx[dir];
					int newy = y.second.second + diry[dir];

					if (newx>=0 && newy>=0 && newx<n && newy<m && arr[newx][newy]!='#' && !vis[newx][newy])
					{
						vis[newx][newy] = 1;
						q.push({y.first+1,{newx,newy}});
					}
				}

			}
			
		}
	}

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