#include <bits/stdc++.h>
using namespace std;
int a[25][25],h,w,di[4]={-1,0,0,1},dj[4]={0,-1,1,0},mx,c[25][25];
queue<tuple<int,int,int>> q;
int main(){
    scanf("%d %d",&h,&w);
    for(int i=0;i<h;i++){
        scanf("\n");
        for(int j=0;j<w;j++){
            char c;
            scanf("%c",&c);
            a[i][j]=(c=='#');
        }
    }
    for(int i=0;i<h;i++)for(int j=0;j<w;j++)if(!a[i][j]){
        q.emplace(i,j,0);
        for(int k=0;k<h;k++)for(int l=0;l<w;l++)c[k][l]=0;
        c[i][j]=1;
        while(!q.empty()){
            int x,y,cst;
            tie(x,y,cst)=q.front();
            q.pop();
            for(int k=0;k<4;k++){
                int xx=x+di[k],yy=y+dj[k];
                if(xx<0||xx>=h||yy<0||yy>=w)continue;
                if(!a[xx][yy]&&!c[xx][yy]){
                    c[xx][yy]=1;
                    q.emplace(xx,yy,cst+1);
                    mx=max(mx,cst+1);
                }
            }
        }
    }
    printf("%d",mx);
}