#include <cstdio>
#include <queue>
using namespace std;

struct P {
  int n;
  int x;
  int y;
  bool b;

  P() {
    P(0,0,0,false);
  }

  P(int n, int x, int y, bool b): n(n),x(x),y(y),b(b) {}

  bool operator<(const P &obj) const {
    return n > obj.n;
  }
};

char a[102][102];
bool u[102][102];
int w, h;
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};

int solve() {
  P p;
  priority_queue<P> q;
  q.push(P(0,0,0, false));
  int xx, yy, n;
  for (int i=0; i<=h+1; i++) {
    for (int j=0; j<=w+1; j++) {
      u[i][j] = false;
    }
  }
  while (!q.empty()) {
    p = q.top();
    q.pop();
    u[p.y][p.x] = true;
    if (a[p.y][p.x] == -1) {
      return p.n;
    }
    for (int i=0; i<4; i++) {
      xx = p.x + dx[i];
      yy = p.y + dy[i];
      if (xx < 0 || xx > w+1 || yy < 0 || yy > h+1 || u[yy][xx]) continue;
      if (!p.b && a[yy][xx]==1) {
        n = p.n+1;
      } else {
        n = p.n;
      }
      q.push(P(n, xx, yy, a[yy][xx]==1));
    }
  }
  return -1;
}

int main() {
  char buf[105];
  while (1) {
    scanf("%d %d\n", &w, &h);
    if (!w && !h) break;
    for (int i=0; i<=h+1; i++) {
      for (int j=0; j<=w+1; j++) {
        a[i][j] = false;
      }
    }
    for (int i=0; i<h; i++) {
      fgets(buf, sizeof(buf), stdin);
      for (int j=0; j<w; j++) {
        if (buf[j] == '#') {
          a[i+1][j+1] = 1;
        } else if (buf[j] == '.') {
          a[i+1][j+1] = 0;
        } else {
          a[i+1][j+1] = -1;
        }
      }
    }

    printf("%d\n", solve());
  }

  return 0;
}