#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<string>
#include<queue>
#define in cin
#define out cout
#define abs(x) ((x>0)?(x):(-(x)))
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)
#define FOR(i, a, b) for(int i = a; i <= b; ++i)
#define DOWNFOR(i, a, b) for(int i = a; i >= b; --i)
#define FOREACH(i, t) for (typeof(t.begin()) i = t.begin(); i != t.end(); ++i)
#define ll long long
using namespace std;
const int Nmax = 105;
int N,M;
int a[Nmax][Nmax];
const int dlin[]={0,1};
const int dcol[]={1,0};
void parc(int i,int j){
    for(int k=0;k<=1;k++){
        if(a[i+dlin[k]][j+dcol[k]]==0 || a[i+dlin[k]][j+dcol[k]]>a[i][j]+1){
            a[i+dlin[k]][j+dcol[k]]=a[i][j]+1;
            parc(i+dlin[k],j+dcol[k]);
        }
    }
}
int main(){
    #ifndef ONLINE_JUDGE
    ifstream in("test.in");
    ofstream out("test.out");
    #endif
    in>>N>>M;
    FOR(i,1,N){
        FOR(j,1,M){
            char c;
            in>>c;
            if(c=='&') a[i][j]=-1;
        }
    }
    a[1][1]=1;
    for(int i=1;i<=N;i++) a[i][0]=-1,a[i][M+1]=-1;
    for(int i=1;i<=M;i++) a[0][i]=-1,a[N+1][i]=-1;
    if(a[1][1]==-1){
        out<<"0\n";
        return 0;
    }
    parc(1,1);
    int m=0;
    FOR(i,1,N){
        FOR(j,1,M){
            m=max(m,a[i][j]);
        }
    }
    out<<m<<'\n';
    return 0;
}