#include <iostream>
#include <fstream>
#include <string.h>
#include <algorithm>
#include <fstream>
#include <bitset>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <utility>
#include <string>
#include <cmath>
#include <iomanip>
#include <cstring>

#define vint vector<int>::iterator
#define vintp vector<pair<int,int> >::iterator
#define inf 1000000
#define ll long long
#define maxn 100010
#define mod 1000000007

using namespace std;

ifstream fin ("A.in");
ofstream fout("A.out");

char s[101][101];
int d[101][101],viz[101][101];
int maxv,n,m,l;

struct que
{
    int i,j;
}q[100001];

int main ()
{
    cin>>n>>m;

    for (int i=1; i<=n; ++i)
        cin>>s[i]+1;

    if (s[1][1] == '&')
    {
        cout<<0;
        return 0;
    }

    q[++l].i = 1;
    q[l].j = 1;
    d[1][1] = 1;

    for (int i=1; i<=n; ++i)
    {
        viz[i][m+1] = 1;
    }

    for (int i=1; i<=m; ++i)
    {
        viz[n+1][i] = 1;
    }

    for (int ss=1; ss<=l; ++ss)
    {
        int i=q[ss].i;
        int j=q[ss].j;

        maxv = max (maxv,d[i][j]);

        if (!viz[i+1][j] && s[i+1][j] != '&')
        {
            viz[i+1][j] = 1;
            ++l;
            q[l].i = i+1;
            q[l].j = j;
            d[i+1][j] = d[i][j] + 1;
        }

        if (!viz[i][j+1] && s[i][j+1] != '&')
        {
            viz[i][j+1] = 1;
            ++l;
            q[l].i = i;
            q[l].j = j+1;
            d[i][j+1] = d[i][j] + 1;
        }
    }

    cout<<maxv;
}