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

int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};

int h,v;

bool valid(int a,int b){
	return (a<h && a>=0 && b<v && b>=0);
}

int main(){
	cin>>h>>v;
	char c[21][21];
	int mx=0;
	for (int i=0;i<h;i++)
		for (int j=0;j<v;j++)
			 cin>>c[i][j];
	for (int i=0;i<h;i++)
		for (int j=0;j<v;j++){
			if (c[i][j]=='#') continue;
			for (int ii=0;ii<h;ii++)
				for (int jj=0;jj<v;jj++){
					if (c[ii][jj]=='#') continue;
					int d[21][21];
					for (int k=0;k<h;k++)
						for (int kk=0;kk<v;kk++)
							d[k][kk]=-1;
					queue<pair<int,int> > q;
					q.push(make_pair(i,j));
					d[i][j]=0;
					
					while (!q.empty()){
						int x=q.front().first;
						int y=q.front().second;
						q.pop();
						for (int k=0;k<4;k++){
							int nx=dx[k]+x;
							int ny=dy[k]+y;
							if (d[nx][ny]==-1 && c[nx][ny]=='.' && valid(nx,ny)){
								d[nx][ny]=d[x][y]+1;
								q.push(make_pair(nx,ny));
							}
						}
					}
					mx=max(d[ii][jj],mx);
				}
		}
	cout<<mx<<endl;
	return 0;
}
