#include<vector>
#include<map>
#define rep(i,n) for(int i=0;i<n;i++)
#define ck(a,b) (0<=(a)&&(a)<b)
using namespace std;
int dx[]={-1,1,0,0},dy[]={0,0,-1,1};

int main(){
	int w,h,sx,sy; char m[101][101];
	while(cin>>w>>h,w){
		rep(i,h)rep(j,w){
			cin>>m[i][j];
			if(m[i][j]=='&')sy=i,sx=j;
		}
		
		vector<pair<int,int> > frontier,next;
		int cost[h][w]; rep(i,h)rep(j,w)cost[i][j]=99999;
		cost[sy][sx]=0;
		frontier.push_back(make_pair(sy,sx));
		
		for(int step=0;!frontier.empty();step++){
			next.clear();
			rep(i,frontier.size()){
				int x=frontier[i].second,y=frontier[i].first,cx,cy,c;
				rep(d,4){
					cx=x+dx[d],cy=y+dy[d];
					if(!ck(cy,h)||!ck(cx,w))continue;
					c=m[y][x]!='#'&&m[cy][cx]=='#'?1:0;
					if(cost[cy][cx]>cost[y][x]+c){
						cost[cy][cx]=cost[y][x]+c;
						next.push_back(make_pair(cy,cx));
					}
				}
			}
			frontier=next;
		}
		int mn=99999;
		rep(i,h){
			if(i==0||i==h-1){
				rep(j,w)if(mn>cost[i][j])mn=cost[i][j];
			}else{
				if(mn>cost[i][0])mn=cost[i][0];
				if(mn>cost[i][w-1])mn=cost[i][w-1];
			}
		}
		cout<<mn<<endl;
	}
	return 0;
}