#include<bits/stdc++.h>
using namespace std;
int w,h;
char mp[210][80];
int cx[2],cy[2],len=0;
int dis[210][80];
bool vis[210][80];
string s;
void dfs(int x,int y,int cos){
if(cos==0){
if(x==0)dfs(x+1,y,1);
else if(x==h)dfs(x-1,y,1);
if(y==0)dfs(x,y+1,1);
else if(y==w)dfs(x,y-1,1);
return;
}
vis[x][y]=1;
dis[x][y]=cos;
if(x+2<=h&&!vis[x+2][y]&&cos+1<dis[x+2][y]&&mp[x+1][y]==' ')dfs(x+2,y,cos+1);
if(x-2>0&&!vis[x-2][y]&&cos+1<dis[x-2][y]&&mp[x-1][y]==' ')dfs(x-2,y,cos+1);
if(y+2<=w&&!vis[x][y+2]&&cos+1<dis[x][y+2]&&mp[x][y+1]==' ')dfs(x,y+2,cos+1);
if(y-2>0&&!vis[x][y-2]&&cos+1<dis[x][y-2]&&mp[x][y-1]==' ')dfs(x,y-2,cos+1);
vis[x][y]=0;
return;
}
int main(){
cin>>w>>h;
w=2*w+1;
h=2*h+1;
getline(cin,s);
for(int i=1;i<=h;i++){
getline(cin,s);
for(int j=1;j<=w;j++){
mp[i][j]=s[j-1];
dis[i][j]=1000000000;
}
}
for(int i=2;i<=h;i+=2)
if(mp[i][1]==' '){
cx[len]=i;
cy[len++]=1;
}else if(mp[i][w]==' '){
cx[len]=i;
cy[len++]=w;
}
for(int i=2;i<=w;i+=2)
if(mp[1][i]==' '){
cx[len]=1;
cy[len++]=i;
}else if(mp[h][i]==' '){
cx[len]=h;
cy[len++]=i;
}
dfs(cx[0],cy[0],0);
dfs(cx[1],cy[1],0);
int maxn=0;
for(int i=2;i<h;i+=2)
for(int j=2;j<w;j+=2)
maxn=max(maxn,dis[i][j]);
cout<<maxn;
return 0;
}