#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

int a[101][101];
char c[101][101];
int n,i,m;
queue< pair<int, int> > q;
pair<int, int> punct;


int ok(int i,int j,int n,int m)
{
    if(i>=0&&i<n&&j>=0&&j<m) return 1;
    return 0;
}

void citeste(int &n,int &m)
{
    ifstream f("run.in");
    int i,j;
    cin>>n>>m;
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            cin>>c[i][j];
}

void rezolva(int xi,int yi)
{
    q.push(make_pair(xi,yi));
    a[xi][yi]=1;
    while(!q.empty())
    {
        punct = q.front();
        int px = punct.first;
        int py = punct.second;
        if(ok(px+1,py,n,m) && c[px+1][py]=='.')
        {
            a[px+1][py] = a[px][py] + 1;
            q.push(make_pair(px+1,py));
        }
          if(ok(px,py+1,n,m) && c[px][py+1]=='.')
        {
            a[px][py+1] = a[px][py] + 1;
            q.push(make_pair(px,py+1));
        }
        q.pop();
    }
}



int main()
{
    citeste(n,m);
    rezolva(0,0);
    int maxi = 0;
    for(i=0;i<m;i++) if(a[0][i]>maxi) maxi=a[0][i];
    for(i=0;i<m;i++) if(a[n-1][i]>maxi) maxi=a[n-1][i];
    for(i=0;i<n;i++) if(a[i][0]>maxi) maxi=a[i][0];
    for(i=0;i<n;i++) if(a[m-1][i]>maxi) maxi=a[m-1][i];
    cout<<maxi;
    return 0;
}