#include <iostream>

using namespace std;

char t[500][500];
static bool posecen[500][500];
int red[] = { 1, 1, 0 };
int kol[] = { 0, 1, 1 };

bool slobodno( int i, int j )
{
    if( t[i][j] == '#' || posecen[i][j] )
        return 0;
    return 1;
}

void nadji( int i, int j, int h, int w, int &mini, int d )
{
    if( i == h && j == w )
    {
        mini = min( mini, d );
        return;
    }
    if( d > mini )
        return;

    posecen[i][j] = 1;

    for( int k = 0; k < 3; k++ )
    {
        if( slobodno( i + red[k], j + kol[k] ) && i < h && j < w && i >= 0 && j >= 0 )
            nadji( i + red[k], j + kol[k], h, w, mini, d+1 );
    }
    posecen[i][j] = 0;
}

int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int mini = 10000, h, w;

    cin >> h >> w;
    for( int i = 0; i < h; i++ )
        for( int j = 0; j < w; j++ )
            cin >> t[i][j];

    nadji( 0, 0, h, w, mini, 0 );

    cout << mini-1 << endl;

    return 0;
}