#include <iostream>
#include <fstream>
#include <queue>
#include <string>
#include <vector>

using namespace std;

ifstream f("fisier.txt");

struct point{

    int i, j, value;

};

int v[102][102],n,m;

void citire(){

    int i, j, nr;
    char line;
    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            scanf("%c", &line);
            if(line=='.')
                nr=0;
            else nr=-1;
            v[i][j]=nr;
        }
        fflush(stdin);
    }
}

int solution(){


    int finishPoint=0, actualI, actualJ;
    queue<point> coada;
    point start, lastElement, newElement;
    start.i = 0;
    start.j = 0;
    start.value = 1;

    if(v[0][0]==0){
    v[0][0]=1;
    coada.push(start);
    }



    while(!coada.empty()){

        lastElement = coada.front();
        finishPoint = lastElement.value;

        coada.pop();

        actualI = lastElement.i;
        actualJ = lastElement.j;

        if(actualJ+1<m)
            if(v[actualI][actualJ+1]==0){
                newElement.i = actualI;
                newElement.j = actualJ+1;
                newElement.value = finishPoint+1;
                v[actualI][actualJ+1] = finishPoint+1;
                coada.push(newElement);
            }

        if(actualI+1<n)
            if(v[actualI+1][actualJ]==0){
                newElement.i = actualI+1;
                newElement.j = actualJ;
                newElement.value = finishPoint+1;
                v[actualI+1][actualJ] = finishPoint+1;
                coada.push(newElement);
        }

    }

    return finishPoint;


}



int main()
{
    scanf("%d%d\n", &n, &m);

    citire();
    cout << solution();
    return 0;
}