#include <bits/stdc++.h>
using namespace std;
template <class T>
void debug(T a) {
  for (auto i : a) cout << i << endl;
}
int dx[4] = {0, 1, 0, -1}, dy[4] = {-1, 0, 1, 0};
int main() {
  int x, y;
  while (cin >> x >> y && x) {
    int a[200][200] = {};
    int f[200][200];
    memset(f, -1, sizeof f);
    pair<int, int> s;
    for (int i = 1; i <= y; i++) {
      for (int j = 1; j <= x; j++) {
        char c;
        cin >> c;
        a[i][j] = c == '#';
        if (c == '&') {
          s.first = i;
          s.second = j;
        }
        f[i][j] = INT_MAX;
      }
    }
    f[s.first][s.second] = 0;
    queue<pair<int, int> > que;
    que.push(s);
    while (!que.empty()) {
      pair<int, int> now = que.front();
      que.pop();
      for (int i = 0; i < 4; i++) {
        pair<int, int> next = now;
        next.first += dy[i];
        next.second += dx[i];
        if (f[next.first][next.second] >
            f[now.first][now.second] + a[now.first][now.second]) {
          f[next.first][next.second] =
              f[now.first][now.second] + a[now.first][now.second];
          que.push(next);
        }
      }
    }
    int ans = INT_MAX;
    for (int i = 1; i <= y; i++)
      ans = min({ans, f[i][1] + a[i][1], f[i][x] + a[i][x]});
    for (int j = 1; j <= x; j++)
      ans = min({ans, f[1][j] + a[1][j], f[y][j] + a[y][j]});
    ;
    cout << ans << endl;
  }
}
