#include<fstream> using namespace std; int n,m,a[101][101],i,j,b[101][101]; char x; int q[100001][2]; int verif(int x,int y) { return (x<0||y<0||x>n||y>m || a[x][y]==-1); } void lee(int x,int y) { int st,dr,xx,yy; q[0][0]=x; q[0][1]=y; st=dr=0; b[1][1]=1; while(st<=dr) { x=q[st][0]; y=q[st++][1]; xx=x+1; yy=y; if( verif(xx,yy)) continue; if(b[xx][yy]<b[x][y]+1) { b[xx][yy]=b[x][y]+1; q[++dr][0]=xx; q[dr][1]=yy; } xx=x; yy=y+1; if( verif(xx,yy)) continue; if(b[xx][yy]<b[x][y]+1) { b[xx][yy]=b[x][y]+1; q[++dr][0]=xx; q[dr][1]=yy; } } } int main() { ifstream f("Input"); ofstream g("Output"); f>>n>>m; for(i=1;i<=n;++i) for(j=1;j<=m;++j) { f>>x; if(x=='.') a[i][j]=0; else a[i][j]=-1; } lee(1,1); int max1=0; for(i=1;i<=n;++i) for(j=1;j<=m;++j) if (b[i][j]>max1) max1=b[i][j]; for(i=1;i<=n;++i) for(j=1;j<=m;++j) b[i][j]=0; lee(n,m); for(i=1;i<=n;++i) for(j=1;j<=m;++j) if (b[i][j]>max1) max1=b[i][j]; for(i=1;i<=n;++i) for(j=1;j<=m;++j) b[i][j]=0; lee(n,1); for(i=1;i<=n;++i) for(j=1;j<=m;++j) if (b[i][j]>max1) max1=b[i][j]; for(i=1;i<=n;++i) for(j=1;j<=m;++j) b[i][j]=0; lee(1,n); for(i=1;i<=n;++i) for(j=1;j<=m;++j) if (b[i][j]>max1) max1=b[i][j]; g<<max1<<"\n"; }