#include <bits/stdc++.h>
using namespace std;
const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1};
int N, M;
char maze[110][110];
unsigned int minp[110][110];
int main() {
  for (;;) {
    memset(minp, -1, sizeof minp);
    scanf(" %d %d", &N, &M);
    if (!N && !M) break;
    for (int i = 0; i < M; i++) {
      scanf(" %s", maze[i]);
    }
    for (int i = 0; i < M; i++) {
      printf("%s\n", maze[i]);
    }
    queue<pair<int, int> > que;
    {
      pair<int, int> put;
      for (int x = 0; x < N; x++) {
        for (int y = 0; y < M; y++) {
          if (maze[y][x] == '&') {
            put.first = x;
            put.second = y;
            minp[y][x] = 0;
            maze[y][x] = '.';
          }
        }
      }
      que.push(put);
    };
    while (!que.empty()) {
      pair<int, int> p = que.front();
      que.pop();
      for (int i = 0; i < 4; i++) {
        int nx = p.first + dx[i];
        int ny = p.second + dy[i];
        if (0 <= nx && nx < N && 0 <= ny && ny < M &&
            maze[p.second][p.first] == '.' && maze[ny][nx] == '.' &&
            minp[ny][nx] > minp[p.second][p.first]) {
          minp[ny][nx] = minp[p.second][p.first];
          que.push(make_pair(nx, ny));
        }
        if (0 <= nx && nx < N && 0 <= ny && ny < M &&
            maze[p.second][p.first] == '#' && maze[ny][nx] == '#' &&
            minp[ny][nx] > minp[p.second][p.first]) {
          minp[ny][nx] = minp[p.second][p.first];
          que.push(make_pair(nx, ny));
        }
        if (0 <= nx && nx < N && 0 <= ny && ny < M &&
            maze[p.second][p.first] == '.' && maze[ny][nx] == '#' &&
            minp[ny][nx] > minp[p.second][p.first]) {
          minp[ny][nx] = minp[p.second][p.first] + 1;
          que.push(make_pair(nx, ny));
        }
        if (0 <= nx && nx < N && 0 <= ny && ny < M &&
            maze[p.second][p.first] == '#' && maze[ny][nx] == '.' &&
            minp[ny][nx] > minp[p.second][p.first]) {
          minp[ny][nx] = minp[p.second][p.first];
          que.push(make_pair(nx, ny));
        }
      }
    }
    unsigned int minv = INT_MAX;
    for (int i = 0; i < N; i++) {
      minv = min(minv, min(minp[0][i], minp[M - 1][i]));
    }
    for (int i = 0; i < M; i++) {
      minv = min(minv, min(minp[i][0], minp[N - 1][i]));
    }
    printf("%d\n", minv);
  }
  return 0;
}
