#include <bits/stdc++.h>
using namespace std;
static const int INF = 1e9;
static const int dx[] = {1, 0, -1, 0};
static const int dy[] = {0, -1, 0, 1};
void solve() {
  int n, m;
  while (cin >> n >> m, n || m) {
    pair<int, int> start;
    vector<vector<char> > field(m, vector<char>(n));
    for (int i = 0; i < m; ++i) {
      for (int j = 0; j < n; ++j) {
        cin >> field[i][j];
        if (field[i][j] == '&') {
          start.first = j;
          start.second = i;
        }
      }
    }
    queue<pair<int, int> > Que;
    Que.push(start);
    queue<pair<int, int> > wallQue;
    vector<vector<int> > fieldStep(m, vector<int>(n));
    for (int i = 0; i < m; ++i) {
      for (int j = 0; j < n; ++j) {
        fieldStep[i][j] = INF;
      }
    }
    fieldStep[start.second][start.first] = 0;
    int cnt = 0;
    while (true) {
      while (!Que.empty()) {
        pair<int, int> cur = Que.front();
        Que.pop();
        for (int i = 0; i < 4; ++i) {
          pair<int, int> next;
          next.first = cur.first + dx[i];
          next.second = cur.second + dy[i];
          if (!(0 <= next.first && next.first < n && 0 <= next.second &&
                next.second < m) ||
              fieldStep[next.second][next.first] != INF) {
            continue;
          } else {
            fieldStep[next.second][next.first] = cnt;
            if (field[next.second][next.first] == '#') {
              wallQue.push(next);
            } else {
              Que.push(next);
            }
          }
        }
      }
      while (!wallQue.empty()) {
        Que.push(wallQue.front());
        wallQue.pop();
      }
      ++cnt;
      if (Que.empty()) {
        break;
      }
    }
    int minv = INF;
    for (int i = 0; i < n; ++i) {
      if (field[0][i] != '#') {
        minv = min(minv, fieldStep[0][i]);
      }
      if (field[m - 1][i] != '#') {
        minv = min(minv, fieldStep[m - 1][i]);
      }
    }
    for (int i = 0; i < m; ++i) {
      if (field[i][0] != '#') {
        minv = min(minv, fieldStep[i][0]);
      }
      if (field[i][n - 1] != '#') {
        minv = min(minv, fieldStep[i][n - 1]);
      }
    }
    cout << minv << endl;
  }
}
int main() {
  solve();
  return (0);
}
