#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;

int n,m;
int gx,gy;
int INF=1000000;
char fie[121][121];
int jp[121][121];
int ans;
int dx[5]={1,0,-1,0,0};
int dy[5]={0,1,0,-1,0};
typedef pair<int,int> P;
typedef pair<P,int> PP;

void bfs(){
	queue<PP> que;
	for(int i=0;i<=120;i++){
		for(int j=0;j<=120;j++){
			jp[j][i]=INF;
		}
	}
	que.push(PP(P(gx,gy),0));
	jp[gx][gy]=0;
	while(que.size()){
		PP p=que.front();que.pop();
		int nx=p.first.first,ny=p.first.second;
		for(int i=0;i<4;i++){
			int kx=nx+dx[i],ky=ny+dy[i],k=p.second;
			if(ky>=0 && ky<n && kx>=0 && kx<m){
				if(fie[kx][ky]=='.' && k<jp[kx][ky]){
					que.push(PP(P(kx,ky),k));
					jp[kx][ky]=k;
				}
				if(fie[kx][ky]=='#' && fie[nx][ny]=='#' && k<jp[kx][ky]){
					que.push(PP(P(kx,ky),k));
					jp[kx][ky]=k;
				}
				if(fie[kx][ky]=='#' && (fie[nx][ny]=='.' || fie[nx][ny]=='&') && k+1<jp[kx][ky]){
					que.push(PP(P(kx,ky),k+1));
					jp[kx][ky]=k+1;
				}
			}else ans=min(ans,k);
		}
	}
}

int main(void){
	while(1){
		scanf("%d%d",&n,&m);
		if(n==0 && m==0)break;
		ans=INF;
		for(int i=0;i<m;i++){
			cin >> fie[i];
			for(int j=0;j<n;j++){
				if(fie[i][j]=='&')gx=i,gy=j;
			}
		}
		bfs();
		printf("%d\n",ans);
	}
    return 0;
}