#include<bits/stdc++.h>
using namespace std;
char a[25][25];
int ans=0,dx[4]={0,0,1,-1},dy[4]={1,-1,0,0},n,m,num[25][25];
void bfs(int sx,int sy){
	queue<pair<pair<int,int>,int>> q;
	map<pair<int,int>,int> vis;
	q.push({{sx,sy},0});
	vis[{sx,sy}]=1;num[sx][sy]=max(num[sx][sy],0);
	while(!q.empty()){
		int x=q.front().first.first;
		int y=q.front().first.second;
		int v=q.front().second;q.pop();
		for(int i=0;i<4;i++){
			int nx=x+dx[i],ny=y+dy[i];
			if(nx<1||nx>n||ny<1||ny>m||a[nx][ny]=='#'||vis[{nx,ny}]==1) continue;
			vis[{nx,ny}]=1;num[nx][ny]=max(num[nx][ny],v+1);
			q.push({{nx,ny},v+1});
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]=='#') continue;
			bfs(i,j);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			ans=max(ans,num[i][j]);
		}
	}
	cout<<ans<<endl;
}