#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
int dp[456][22][22] = {};
int ma = 0;
char s[22][22];
int h, w;
void con(int p, int w2, int h2, int cnt) {
  for (int i = 0; i < 4; i++) {
    switch (i) {
      case 0:
        if (w2 + 1 < w)
          if (s[h2][w2 + 1] == '.') {
            if (cnt < dp[p][h2][w2 + 1]) {
              dp[p][h2][w2 + 1] = cnt;
              con(p, w2 + 1, h2, cnt + 1);
            }
          }
        break;
      case 1:
        if (w2 - 1 >= 0)
          if (s[h2][w2 - 1] == '.') {
            if (cnt < dp[p][h2][w2 - 1]) {
              dp[p][h2][w2 - 1] = cnt;
              con(p, w2 - 1, h2, cnt + 1);
            }
          }
        break;
      case 2:
        if (h2 + 1 < h)
          if (s[h2 + 1][w2] == '.') {
            if (cnt < dp[p][h2 + 1][w2]) {
              dp[p][h2 + 1][w2] = cnt;
              con(p, w2, h2 + 1, cnt + 1);
            }
          }
        break;
      case 3:
        if (h2 - 1 >= 0)
          if (s[h2 - 1][w2] == '.') {
            if (cnt < dp[p][h2 - 1][w2]) {
              dp[p][h2 - 1][w2] = cnt;
              con(p, w2, h2 - 1, cnt + 1);
            }
          }
        break;
    }
  }
}
int main() {
  cin >> h >> w;
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      cin >> s[i][j];
      for (int k = 0; k < h * w; k++) {
        dp[k][i][j] = 1010101;
      }
    }
  }
  for (int i = 0; i < h * w; i++) {
    if (s[i % h][i % w] == '.') con(i, i % w, i % h, 1);
  }
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      for (int k = 0; k < h * w; k++) {
        if (dp[k][i][j] != 1010101) ma = ma > dp[k][i][j] ? ma : dp[k][i][j];
      }
    }
  }
  cout << ma << "\n";
}
