#include <bits/stdc++.h>
using namespace std;
int H, W;
struct Info {
  Info(int arg_row, int arg_col, int arg_num) {
    row = arg_row;
    col = arg_col;
    num = arg_num;
  }
  int row, col, num;
};
int diff_row[4] = {-1, 0, 0, 1}, diff_col[4] = {0, -1, 1, 0};
bool rangeCheck(int row, int col) {
  if (row >= 0 && row <= H + 1 && col >= 0 && col <= W + 1)
    return true;
  else {
    return false;
  }
}
void func() {
  char map[H + 2][W + 3];
  for (int row = 0; row <= H + 1; row++) {
    for (int col = 0; col <= W + 1; col++) {
      map[row][col] = '.';
    }
  }
  char buf[W + 1];
  int goal_row, goal_col;
  for (int row = 1; row <= H; row++) {
    scanf("%s", buf);
    for (int col = 1; col <= W; col++) {
      map[row][col] = buf[col - 1];
      if (buf[col - 1] == '&') {
        goal_row = row;
        goal_col = col;
      }
    }
  }
  int min_count[H + 2][W + 2];
  for (int row = 0; row <= H + 1; row++) {
    for (int col = 0; col <= W + 1; col++) {
      min_count[row][col] = 2000000000;
    }
  }
  queue<Info> Q;
  for (int col = 1; col <= W; col++) {
    min_count[0][col] = 0;
    Q.push(Info(0, col, 0));
    min_count[H + 1][col] = 0;
    Q.push(Info(H + 1, col, 0));
  }
  for (int row = 1; row <= H; row++) {
    min_count[row][0] = 0;
    Q.push(Info(row, 0, 0));
    min_count[row][W + 1] = 0;
    Q.push(Info(row, W + 1, 0));
  }
  int next_row, next_col;
  while (!Q.empty()) {
    if (Q.front().row == goal_row && Q.front().col == goal_col) {
      Q.pop();
    } else if (Q.front().num > min_count[Q.front().row][Q.front().col]) {
      Q.pop();
    } else {
      for (int i = 0; i < 4; i++) {
        next_row = Q.front().row + diff_row[i];
        next_col = Q.front().col + diff_col[i];
        if (!rangeCheck(next_row, next_col)) continue;
        if (map[next_row][next_col] == '#') {
          if (min_count[next_row][next_col] > Q.front().num + 1) {
            min_count[next_row][next_col] = Q.front().num + 1;
            Q.push(Info(next_row, next_col, Q.front().num + 1));
          }
        } else {
          if (min_count[next_row][next_col] > Q.front().num) {
            min_count[next_row][next_col] = Q.front().num;
            Q.push(Info(next_row, next_col, Q.front().num));
          }
        }
      }
      Q.pop();
    }
  }
  printf("%d\n", min_count[goal_row][goal_col]);
}
int main() {
  while (true) {
    scanf("%d %d", &W, &H);
    if (W == 0 && H == 0) break;
    func();
  }
  return 0;
}
