#include <bits/stdc++.h>

#define F first
#define S second

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

const int N = 25, M = 1010;

int n, m, res;
int dist[N][N];
PII q[M];
char g[N][N];

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

void bfs(int x, int y)
{
	memset(dist, -1, sizeof dist);
	
	int hh = 0, tt = -1;
	q[ ++ tt] = {x, y};
	dist[x][y] = 0;
	
	while (hh <= tt)
	{
		auto t = q[hh ++ ];
		
		for (int i = 0; i < 4; i ++ )
		{
			int tx = t.F + dx[i];
			int ty = t.S + dy[i];
			
			if (tx < 0 || ty < 0 || tx >= n || ty >= m) continue;
			if (g[tx][ty] == '#' || dist[tx][ty] != -1) continue;
			
			q[ ++ tt] = {tx, ty};
			int d = dist[t.F][t.S] + 1;
			res = max(res, d);
			dist[tx][ty] = d;
		}
	}
}

int main()
{
	scanf("%d%d", &n, &m);
	for (int i = 0; i < n; i ++ ) scanf("%s", g[i]);
	
	for (int i = 0; i < n; i ++ )
		for (int j = 0; j < m; j ++ )
			if (g[i][j] == '.')
				bfs(i, j);

	printf("%d\n", res);
	return 0;
}