#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <cfloat>
#include <stack>
#include <queue>
#include <vector>
#include <string>
#include <iostream>
typedef long long int ll;
typedef unsigned long long int ull;
#define BIG_NUM 2000000000
#define MOD 1000000007
#define EPS 0.000000001
using namespace std;

int H,W;

struct Info{
	Info(int arg_row,int arg_col,int arg_num){
		row = arg_row;
		col = arg_col;
		num = arg_num;
	}

	int row,col,num;
};

int diff_row[4] = {-1,0,0,1},diff_col[4] = {0,-1,1,0};

bool rangeCheck(int row,int col){
	if(row >= 0 && row <= H+1 && col >= 0 && col <= W+1)return true;
	else{
		return false;
	}
}

void func(){

	char map[H+2][W+3];

	for(int row = 0; row <= H+1; row++){
		for(int col = 0; col <= W+1; col++){
			map[row][col] = '.';
		}
	}

	char buf[W+1];
	int goal_row,goal_col;

	for(int row = 1; row <= H; row++){
		scanf("%s",buf);
		for(int col = 1; col <= W; col++){
			map[row][col] = buf[col-1];
			if(buf[col-1] == '&'){
				goal_row = row;
				goal_col = col;
			}
		}
	}

	int min_count[H+2][W+2];

	for(int row = 0; row <= H+1; row++){
		for(int col = 0; col <= W+1; col++){
			min_count[row][col] = BIG_NUM;
		}
	}

	queue<Info> Q;

	for(int col = 1; col <= W; col++){
		min_count[0][col] = 0;
		Q.push(Info(0,col,0));
		min_count[H+1][col] = 0;
		Q.push(Info(H+1,col,0));
	}

	for(int row = 1; row <= H; row++){
		min_count[row][0] = 0;
		Q.push(Info(row,0,0));
		min_count[row][W+1] = 0;
		Q.push(Info(row,W+1,0));
	}

	int next_row,next_col;

	while(!Q.empty()){

		if(Q.front().row == goal_row && Q.front().col == goal_col){
			Q.pop();
		}else if(Q.front().num > min_count[Q.front().row][Q.front().col]){
			Q.pop();
		}else{

			for(int i = 0; i < 4; i++){
				next_row = Q.front().row + diff_row[i];
				next_col = Q.front().col + diff_col[i];

				if(!rangeCheck(next_row,next_col))continue;

				if(map[Q.front().row][Q.front().col] == '#' && map[next_row][next_col] != '#'){
					if(min_count[next_row][next_col] > Q.front().num+1){
						min_count[next_row][next_col] = Q.front().num+1;
						Q.push(Info(next_row,next_col,Q.front().num+1));
					}
				}else{
					if(min_count[next_row][next_col] > Q.front().num){
						min_count[next_row][next_col] = Q.front().num;
						Q.push(Info(next_row,next_col,Q.front().num));
					}
				}
			}
			Q.pop();
		}
	}

	printf("%d\n",min_count[goal_row][goal_col]);

}


int main(){

	while(true){
		scanf("%d %d",&W,&H);
		if(W == 0 && H == 0)break;

		func();
	}

	return 0;
}