#include <bits/stdc++.h>
using namespace std;
char c[20][20];
int h, w;
int ig, jg;
int bfs(int i0, int j0) {
  queue<int> iq, jq;
  bool visited[20][20] = {};
  int d[20][20] = {};
  int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
  iq.push(i0), jq.push(j0);
  visited[i0][j0] = true;
  d[i0][j0] = 0;
  auto contain = [&](int i, int j) {
    return 0 <= i && i < h && 0 <= j && j < w;
  };
  while (iq.size()) {
    int i = iq.front(), j = jq.front();
    iq.pop(), jq.pop();
    ig = i;
    jg = j;
    for (int k = 0; k < 4; k++) {
      int i1 = i + dir[k][0], j1 = j + dir[k][1];
      if (contain(i1, j1) && c[i1][j1] == '.' && !visited[i1][j1]) {
        iq.push(i1), jq.push(j1);
        visited[i1][j1] = true;
        d[i1][j1] = d[i][j] + 1;
      }
    }
  }
  return d[ig][jg];
}
int diameter() {
  int i0, j0;
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      if (c[i][j] == '.') i0 = i, j0 = j;
    }
  }
  bfs(i0, j0);
  return bfs(ig, jg);
}
int main() {
  cin >> h >> w;
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      cin >> c[i][j];
    }
  }
  cout << diameter() << endl;
  return 0;
}
