#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <climits>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#define ALL(A)		(A).begin(),(A).end()
#define DUMP(A)    cout<<#A<<"="<<(A)<< endl
#define SIZE(A)    (int)((A).size())
using namespace std;
typedef long long ll;
typedef pair<int,int> P;

int vx[]={1,0,-1,0},vy[]={0,-1,0,1};

int main(){
    for(;;){
        int n,m;
        scanf("%d %d\n",&n,&m);
        if(n==0&&m==0) break;
        char ma[100][100];
        int dx,dy;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                scanf("%c",&ma[i][j]);
                if(ma[i][j]=='&'){
                    dx=i;
                    dy=j;
                }
            }
            scanf("\n");
        }
        int dist[100][100];
        const int INF=100000;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                dist[i][j]=INF;
            }
        }
        dist[dx][dy]=0;
        priority_queue<pair<int,P>,vector<pair<int,P> >,greater<pair<int,P> > > que;
        que.push(make_pair(0,P(dx,dy)));
        while(!que.empty()){
            pair<int,P> now=que.top();
            que.pop();
            int di=now.first,nox=now.second.first,noy=now.second.second;
            if(dist[nox][noy]<di) continue;
            for(int v=0;v<4;v++){
                int nex=nox+vx[v],ney=noy+vy[v];
                if(0<=nex&&nex<m&&0<=ney&&ney<n){
                    if(ma[nox][noy]=='#'){
                        if(dist[nex][ney]>dist[nox][noy]){
                            dist[nex][ney]=dist[nox][noy];
                            que.push(make_pair(dist[nex][ney],P(nex,ney)));
                        }
                    }else{
                        int nedist=dist[nox][noy];
                        if(ma[nex][ney]=='#') nedist++;
                        if(dist[nex][ney]>nedist){
                            dist[nex][ney]=nedist;
                            que.push(make_pair(dist[nex][ney],P(nex,ney)));
                        }
                    }
                }
            }
        }
        int mi=INF;
        for(int i=0;i<m;i++){
            mi=min(mi,dist[i][0]);
            mi=min(mi,dist[i][n-1]);
        }
        for(int i=0;i<n;i++){
            mi=min(mi,dist[0][i]);
            mi=min(mi,dist[m-1][i]);
        }
        printf("%d\n",mi);
    }
}