#include<iostream>
#include<algorithm>
#include<cstring>
#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) {
		cin >> W >> H; memset(dist, 127, sizeof(dist)); queue<pair<int, int> >Q;
		memset(X, 127, sizeof(X));
		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] <= 1) {
					int dis = dist[cx][cy] + X[ex][ey];
					if (dist[ex][ey] > dis) {
						dist[ex][ey] = dis; Q.push(make_pair(ex, ey));
					}
				}
			}
		}
		cout << dist[gx][gy] << endl;
	}
}