#include <bits/stdc++.h>
using namespace std;
int h, w;
vector<vector<char>> s;
vector<vector<int>> sb;
vector<int> dx = {-1, 0, 1, 0};
vector<int> dy = {0, -1, 0, 1};

struct xydata {
    int x, y;
};

int bfs(int sx, int sy, int gx, int gy) {
    sb = vector<vector<int>>(h, vector<int>(w, 1000));
    xydata first;
    first.x = sx;
    first.y = sy;
    queue<xydata> que;
    que.push(first);
    for(int i = 0; i < h; ++i) {
        for(int j = 0; j < w; ++j) {
            sb.at(i).at(j) = 1000;
        }
    }
    sb.at(first.y).at(first.x) = 0;

    while(!que.empty()) {
        xydata now = que.front();
        que.pop();
        if(now.x == gx && now.y == gy) {
            break;
        }
        for(int i = 0; i < 4; ++i) {
            xydata next;
            next.x = now.x+dx.at(i);
            next.y = now.y+dy.at(i);
            if(next.x >= 0 && next.x < w && next.y >= 0 && next.y < h) {
                if(s.at(next.y).at(next.x) == '.' && sb.at(next.y).at(next.x) == 1000) {
                        sb.at(next.y).at(next.x) = sb.at(now.y).at(now.x) + 1;
                        que.push(next);
                    }
                }
            }
        }
    }
    return sb.at(gy).at(gx);
}

int main() {
    cin >> h >> w;
    s = vector<vector<char>>(h, vector<char>(w, '.'));
    for(int i = 0; i < h; ++i) {
        for(int j = 0; j < w; ++j) {
            cin >> s.at(i).at(j);
        }
    }

    int maxlen = 0;
    for(int i = 0; i < h; ++i) {
        for(int j = 0; j < w; ++j) {
            if(s.at(i).at(j) == '.') {
                for(int k = 0; k < h; ++k) {
                    for(int l = 0; l < w; ++l) {
                        if(i == k && j == l) {
                        
                        }else {
                            if(s.at(k).at(l) == '.') {
                                // cout << j << i << l << k << " ";
                                int len = bfs(j, i, l, k);
                                // cout << len << endl;
                                maxlen = max(maxlen, len);
                            }
                        }
                    }
                }
            }
        }
    }
    
    cout << maxlen << endl;
}
