#include<iostream>
#include<deque>
using namespace std;
int N,M;
string s[100];
int d[100][100];
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
main()
{
	while(cin>>M>>N,N)
	{
		for(int i=0;i<N;i++)
		{
			cin>>s[i];
			for(int j=0;j<M;j++)d[i][j]=i==0||j==0||i==N-1||j==M-1?0:1e9;
		}
		deque<pair<int,int> >P;
		for(int i=0;i<N;i++)P.push_back(make_pair(i,0)),P.push_back(make_pair(i,M-1));
		for(int j=1;j<M-1;j++)P.push_back(make_pair(0,j)),P.push_back(make_pair(N-1,j));
		while(!P.empty())
		{
			int x=P.front().first,y=P.front().second;
			P.pop_front();
			for(int r=0;r<4;r++)
			{
				int tx=x+dx[r],ty=y+dy[r];
				if(tx<0||ty<0||tx>=N||ty>=M)continue;
				int cost=s[x][y]=='#'&&(s[tx][ty]=='.'||s[tx][ty]=='&')?1:0;
				if(d[x][y]+cost>=d[tx][ty])continue;
				d[tx][ty]=d[x][y]+cost;
				if(cost==1)P.push_back(make_pair(tx,ty));
				else P.push_front(make_pair(tx,ty));
			}
		}
		for(int i=0;i<N;i++)for(int j=0;j<M;j++)if(s[i][j]=='&')cout<<d[i][j]<<endl;
	}
}

