#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("concurs.in");

queue <pair<int, int> > coada;

int a[110][110];

 int n, m, j, i;

inline bool on_map(int x, int y)
{
    if(x>=1 && x<=n && y>=1 && y<=m)
        return 1;
    return 0;
}

int main()
{

    cin>>n>>m;

    char c;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cin>>c;
            if(c=='.')
                a[i][j]=0;
            else
                a[i][j]=-1;
        }
    }

    coada.push(make_pair(1, 1));
    if(!a[1][1])
    a[1][1]=1;
    pair<int, int> nod;
    while(coada.size())
    {
        nod=coada.front();
        coada.pop();
        if(!on_map(nod.first, nod.second))
            continue;
        if(!a[nod.first+1][nod.second])
        {
            a[nod.first+1][nod.second]=a[nod.first][nod.second]+1;
            coada.push(make_pair(nod.first+1, nod.second));
        }
        if(!a[nod.first][nod.second+1])
        {
            a[nod.first][nod.second+1]=a[nod.first][nod.second]+1;
            coada.push(make_pair(nod.first, nod.second+1));
        }
    }
    int s=0;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(a[i][j]>0)
                s=max(s, a[i][j]);
        }
    }
    cout<<s;
    return 0;
}