#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
int main(){
  while(1){
  int dx[5]={1,-1,0,0},dy[5]={0,0,1,-1};
  int i,j,n,m,a[110][110],b[110][110];
  char s;
  int INF=(1<<29);
  scanf("%d %d\n",&m,&n);
  if(m==0 && n==0){
    return 0;
  }
  for(i=0;i<=n+1;i++){
    for(j=0;j<=m+1;j++){
      a[i][j]=2;
      b[i][j]=INF;
    }
  }
  queue<P> que;
  for(i=1;i<=n;i++){
   for(j=1;j<=m;j++){
     scanf("%c",&s);
     if(s=='.'){
       a[i][j]=0;
     }
     else if(s=='&'){
       a[i][j]=0,b[i][j]=0;
       que.push(P(i,j));
     }
     else{
       a[i][j]=1;
     }
   }
    scanf("\n");
  }
  while(!que.empty()){
    P p=que.front();
    que.pop();
    for(i=0;i<4;i++){
      if(a[p.first][p.second]==1 && a[p.first+dx[i]][p.second+dy[i]]==0){
        if(b[p.first+dx[i]][p.second+dy[i]]>b[p.first][p.second]+1){
          que.push(P(p.first+dx[i],p.second+dy[i]));
          b[p.first+dx[i]][p.second+dy[i]]=b[p.first][p.second]+1;
        }
      }
      else if(a[p.first][p.second]==1 && a[p.first+dx[i]][p.second+dy[i]]==2){
        if(b[p.first+dx[i]][p.second+dy[i]]>b[p.first][p.second]+1){
          b[p.first+dx[i]][p.second+dy[i]]=b[p.first][p.second]+1;
        }
      }
      else if(a[p.first+dx[i]][p.second+dy[i]]==2){
        if(b[p.first+dx[i]][p.second+dy[i]]>b[p.first][p.second]){
          b[p.first+dx[i]][p.second+dy[i]]=b[p.first][p.second];
        }
      }
      else{
        if(b[p.first+dx[i]][p.second+dy[i]]>b[p.first][p.second]){
          que.push(P(p.first+dx[i],p.second+dy[i]));
          b[p.first+dx[i]][p.second+dy[i]]=b[p.first][p.second];
        }
      }
    }
  }
  int ans=INF;
  for(i=0;i<=n+1;i++){
    for(j=0;j<=m+1;j++){
      if(a[i][j]==2 && ans>b[i][j]){
        ans=b[i][j];
      }
    }
  }
  cout << ans << endl;
  }
}
