#include<bits/stdc++.h>

using namespace std;
#define int long long
int n,m;int ans;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
struct str {
	int x,y;
};
string mp[666];
int vis[66][66];
void bfs(int x,int y){
	for(int i=0;i<33;i++)
		for(int j=0;j<33;j++)	
			vis[i][j]=-1;
	vis[x][y]=0;
	queue<str> q;
	q.push((str){x,y});
	while(!q.empty()){
		struct str t;
		t=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			int tx=t.x+dx[i];
			int ty=t.y+dy[i];
			if(tx>=0&&ty>=0&&tx<n&&ty<m&&vis[tx][ty]==-1&&mp[tx][ty]!='#'){
				vis[tx][ty]=vis[t.x][t.y]+1;
				ans=max(ans,vis[tx][ty]);
				q.push((str){tx,ty});
			}
		}
	}
}
signed main(){
	cin>>n>>m;
	for(int i=0;i<n;i++) cin>>mp[i];
	ans=0;
	for(int i=0;i<n;i++){
	    for(int j=0;j<m;j++){
			if(mp[i][j]=='.'){
				bfs(i,j);
			}
		}
	}cout<<ans;
	return 0;
}