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

int main()
{
  int n,m;
  for(;cin>>n>>m,n;)
    {
      char maps[m][n];
      for(int i=0;i<m;i++)
	for(int j=0;j<n;j++)
	  cin>>maps[i][j];

      //count,now;
      priority_queue<pair<int,pair<int,int> > >qu;
      for(int i=0;i<m;i++)
	{
	  qu.push(make_pair(0,make_pair(i,0)));
	  qu.push(make_pair(0,make_pair(i,n-1)));
	}
      for(int i=0;i<n;i++)
	{
	  qu.push(make_pair(0,make_pair(0,i)));
	  qu.push(make_pair(0,make_pair(m-1,i)));
	}
      bool closed[m][n];
      memset(closed,false,sizeof(closed));
      int dx[]={1,-1,0,0};
      int dy[]={0,0,1,-1};
      while(!qu.empty())
	{
	  int cnt=-(qu.top().first);
	  pair<int,int> now = qu.top().second;
	  int x=now.first;
	  int y=now.second;
	  qu.pop();
	  if(maps[x][y]=='&')
	    {
	      cout<<cnt<<endl;
	      break;
	    }
	  if(closed[x][y])
	    continue;
	  closed[x][y]=true;
	  for(int i=0;i<4;i++)
	    {
	      int nx=x+dx[i];
	      int ny=y+dy[i];
	      if(nx>=0 &&nx<m &&
		 ny>=0 &&ny<n &&
		 !closed[nx][ny])
		{
		  int ncnt=cnt;
		  if(maps[x][y]=='#' && maps[nx][ny]!='#' )
		    ncnt++;
		  qu.push(make_pair(-(ncnt),make_pair(nx,ny)));
		}
	    }
	}
    }

}