#include<bits/stdc++.h>
#define r(i,n) for(int i=0;i<n;i++)
using namespace std;
int dx[]={0,0,1,-1},dy[]={1,-1,0,0},w,h,t,d[101][101];
string s[101];
typedef pair<int,int> P;
queue<P>q;
void dfs(int a,int b,char p){
  d[a][b]=t;
  r(i,4){
    int y=a+dy[i],x=b+dx[i];
    if(y>=0&&x>=0&&y<h&&x<w){
      if(d[y][x]==1e9){
        if(s[a][b]==s[y][x])dfs(y,x,p);
        else q.push(P(y,x));
      }
    }
  }
}
int main(){
  while(cin>>w>>h,w){
    while(!q.empty())q.pop();
    r(i,h)r(j,w)d[i][j]=1e9;
    r(i,h)cin>>s[i];
    r(i,h)r(j,w)if(s[i][j]=='&'){
      s[i][j]='.';t=0;
      dfs(i,j,s[i][j]);
    }
    r(i,1e9){
      if(i%2==0)t++;
      if(q.empty())break;
      queue<P>pp;
      while(!q.empty())pp.push(q.front()),q.pop();
      while(!pp.empty()){
        P pt=pp.front();pp.pop();
        int y=pt.first,x=pt.second;
        if(d[y][x]==1e9)dfs(y,x,s[y][x]);
      }
    }
    int ans=1e9;
    r(i,h)ans=min(ans,min(d[i][0],d[i][w-1]));
    r(i,w)ans=min(ans,min(d[0][i],d[h-1][i]));
    cout<<ans<<endl;
  }
}