#include <bits/stdc++.h>
using namespace std;

#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,n) FOR(i,0,n)
#define INF (1<<29)

typedef pair<int, int> pii;

int main() {
	int n, m;
	while (cin >> n >> m, n || m) {
		vector<vector<int> > cnt(m, vector<int>(n, INF));
		vector<string> str(m);
		REP(i, m) cin >> str[i];
		
		priority_queue<pair<int, pii>, vector<pair<int, pii> >, greater<pair<int, pii> > > pq;
		REP(i, m) {
			pq.push(make_pair(str[i][0] == '#', pii(i, 0)));
			pq.push(make_pair(str[i][n - 1] == '#', pii(i, n - 1)));
		}
		REP(i, n) {
			pq.push(make_pair(str[0][i] == '#', pii(0, i)));
			pq.push(make_pair(str[m - 1][i] == '#', pii(m - 1, i)));
		}
		
		while (!pq.empty()) {
			pair<int, pii> now = pq.top();
			pq.pop();
			
			int x = now.second.second, y = now.second.first;
			if (cnt[y][x] != INF) continue;
			cnt[y][x] = now.first;
			
			if (str[y][x] == '&') {
				cout << cnt[y][x] << endl;
				break;
			}
			
			int dx[4] = {1,0,-1,0}, dy[4] = {0,1,0,-1};
			REP(i, 4) {
				int nx = x + dx[i], ny = y + dy[i];
				if (!(nx >= 0 && nx < n && ny >= 0 && ny < m)) continue;
				pq.push(make_pair(cnt[y][x] + (str[y][x] != '#' && str[ny][nx] == '#'), pii(ny, nx)));
			}
		}
	}
	return 0;
}