#include<bits/stdc++.h>
using namespace std;
char matrix[25][25];
int H, W;
bool fix[25][25];
void maxx(int x, int y, int &res){
	queue < pair < pair < int, int > , int > > q;
	q.push({{x, y}, 0});
	while(q.size()){
		int x = q.front().first.first;
		int y = q.front().first.second;
		int z = q.front().second;
		q.pop();
		if(x < 0 || x >= H || y < 0 || y >= W || matrix[x][y] != '.' || fix[x][y])continue;
		fix[x][y] = true;
		res = max(res, z);
		q.push({{x, y + 1}, z + 1});
		q.push({{x, y - 1}, z + 1});
		q.push({{x - 1, y}, z + 1});
		q.push({{x + 1, y}, z + 1});
	}
}
int main(){
	int ans = 0;
	cin >> H >> W;
	for(int i = 0; i < H; i++){
		for(int j = 0; j < W; j++){
			cin >> matrix[i][j];
		}
	} 
	for(int i = 0; i < H; i++){
		for(int j = 0; j < W; j++){
			for(int x = 0; x < H; x++)
				for(int y = 0; y < W; y++)
					fix[x][y] = 0;
			maxx(i, j, ans);
		}
	}
	cout << ans << '\n';
}