#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";

}