#include <bits/stdc++.h>
#define rep(i,n)for(int i=0;i<(n);i++)
using namespace std;
typedef long long ll;
typedef pair<int,int>P;

const int MOD=1000000007;
const int INF=0x3f3f3f3f;
const ll INFL=0x3f3f3f3f3f3f3f3f;

char s[30][30];
int dx[]{1,-1,0,0},dy[]{0,0,1,-1};
int d[30][30];

int main(){
	int h,w;cin>>h>>w;
	rep(i,h)scanf("%s",s[i]);
	int Max=0;
	rep(sx,h)rep(sy,w){
		if(s[sx][sy]=='#')continue;
		memset(d,-1,sizeof(d));
		d[sx][sy]=0;
		queue<P>que;
		que.push(P(sx,sy));
		while(!que.empty()){
			P p=que.front();que.pop();
			rep(k,4){
				int nx=p.first+dx[k],ny=p.second+dy[k];
				if(0<=nx&&nx<h&&0<=ny&&ny<w&&s[nx][ny]=='.'&&d[nx][ny]==-1){
					d[nx][ny]=d[p.first][p.second]+1;
					que.push(P(nx,ny));
				}
			}
		}
		rep(i,h)rep(j,w){
			Max=max(Max,d[i][j]);
		}
	}
	cout<<Max<<endl;
}