#include <bits/stdc++.h>
using namespace std;
int n, m;
int map[102][102];
int M[102][102];
bool inline inRange(int t, int min, int max) { return min <= t && t < max; }
void dfs(int i, int j, int now) {
  const int ci[] = {-1, 0, 1, 0};
  const int cj[] = {0, 1, 0, -1};
  if (M[i][j] != now) return;
  for (int k = 0; k < sizeof(ci) / sizeof(*ci); ++k) {
    int ti = i + ci[k];
    int tj = j + cj[k];
    if (inRange(ti, 1, m + 1) && inRange(tj, 1, n + 1)) {
      if (map[i][j] == 1 && map[ti][tj] == 2) {
        M[ti][tj] = now + 1;
        continue;
      }
      if (M[ti][tj] == now) {
        continue;
      }
      M[ti][tj] = now;
      dfs(ti, tj, now);
    }
  }
  return;
}
void ResetMap() {
  for (int i = (0); i < (102); ++i)
    for (int j = (0); j < (102); ++j) {
      map[i][j] = 2;
      M[i][j] = (-1);
    }
}
void PrintMap() {
  for (int i = (1); i < (m + 1); ++i) {
    for (int j = (1); j < (n + 1); ++j) {
      cout << setw(3) << M[i][j];
    }
    cout << endl;
  }
  cout << endl;
}
bool Completed(int *ans) {
  for (int i = (1); i < (m + 1); ++i) {
    if (M[i][1] > (-1)) {
      *ans = M[i][1];
      return true;
    }
    if (M[i][n] > (-1)) {
      *ans = M[i][n];
      return true;
    }
  }
  for (int j = (1); j < (n + 1); ++j) {
    if (M[1][j] > (-1)) {
      *ans = M[1][j];
      return true;
    }
    if (M[m][j] > (-1)) {
      *ans = M[m][j];
      return true;
    }
  }
  return false;
}
int main() {
  while (true) {
    int now = 0;
    int ans = 1 << 21;
    int si;
    int sj;
    cin >> n >> m;
    if (m == 0 && n == 0) break;
    ResetMap();
    for (int i = (1); i < (m + 1); ++i) {
      string s;
      cin >> s;
      for (int j = (1); j < (n + 1); ++j) {
        if (s[j - 1] == '&') {
          si = i;
          sj = j;
          M[si][sj] = 0;
        } else if (s[j - 1] == '#') {
          map[i][j] = 1;
        }
      }
    }
    while (true) {
      for (int i = (1); i < (m + 1); ++i) {
        for (int j = (1); j < (n + 1); ++j) {
          dfs(i, j, now);
        }
      }
      if (Completed(&ans))
        break;
      else {
        ++now;
      }
    }
    cout << ans << endl;
  }
  return 0;
}
