#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define MAX_N 1000
int X[MAX_N][MAX_N], dist[MAX_N][MAX_N], W, H, gx, gy; char c;
int main() {
	while (true) {
		for (int i = 0; i < MAX_N; i++) {
			for (int j = 0; j < MAX_N; j++) {
				X[i][j] = 1000000000;
				dist[i][j] = 1000000000;
			}
		}
		cin >> W >> H; queue<pair<int, int>>Q;
		if (W == 0 && H == 0) { break; }
		for (int i = 1; i <= H; i++) {
			for (int j = 1; j <= W; j++) {
				cin >> c;
				if (c == '&') { gx = i; gy = j; }
				if (c == '#') { X[i][j] = 1; }
				else { X[i][j] = 0; }
				if (i == 1 || i == H || j == 1 || j == W) {
					Q.push(make_pair(i, j));
					dist[i][j] = X[i][j];
				}
			}
		}
		while (!Q.empty()) {
			pair<int, int>pa = Q.front(); Q.pop();
			int cx = pa.first, cy = pa.second;
			int dx[4] = { 1,0,-1,0 };
			int dy[4] = { 0,1,0,-1 };
			for (int i = 0; i < 4; i++) {
				int ex = cx + dx[i], ey = cy + dy[i];
				if (X[ex][ey] >= 2) { continue; }
				int dis = dist[cx][cy];
				if (X[cx][cy] == 0 && X[ex][ey] == 1) {
					dis += 1;
				}
				if (dist[ex][ey]>dis) {
					dist[ex][ey] = dis;
					Q.push(make_pair(ex, ey));
				}
			}
		}
		cout << dist[gx][gy] << endl;
	}
	return 0;
}