// BFS
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <complex>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cmath>
#include <queue>
using namespace std;

#define REP(i,n) for(int i=0;i<(int)n;++i)
#define FOR(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)
#define ALL(c) (c).begin(), (c).end()
#define INF 1<<30

int dx[] = {0,1,0,-1};
int dy[] = {-1,0,1,0};

typedef pair<int,int> pii;
typedef pair<int,pii> P;


int main() {
  int n,m;
  while(cin >> n >> m,n||m) {
    int cx, cy;
    char ba[n+2][m+2];
    memset(ba, '.', sizeof(ba));
    for (int y=1; y<=m; ++y) {
      for (int x=1; x<=n; ++x) {
        cin >> ba[x][y];
        if (ba[x][y] == '&') {
          cx = x;
          cy = y;
        }
      }
    }
    int ans[n+2][m+2];
    memset(ans,-1,sizeof(ans));
    priority_queue<P, vector<P>, greater<P> > Q;
    Q.push(P(0,pii(0,0)));
    while(!Q.empty()) {
      P nwP = Q.top();
      Q.pop();
      pii nwp = nwP.second;
      int x = nwp.first, y = nwp.second;
      if (ans[x][y] >= 0) continue;
      //  printf("%d,%d\n",x,y);
      ans[x][y] = nwP.first;
      REP(k,4) {
        int xx = x+dx[k], yy = y+dy[k];
        if (ans[xx][yy] >= 0 || xx<0||n+2<=xx||yy<0||m+2<=yy) continue;
        if (ba[x][y] == '#' && ba[xx][yy] != '#') {
          Q.push(P(nwP.first+1, pii(xx,yy)));
        } else {
          Q.push(P(nwP.first, pii(xx,yy)));
        }
      }
    }
    // REP(y,m) {
    //   REP(x,n) {
    //     cout << ans[x+1][y+1] << "" ;
    //   }
    //   cout << endl;
    // }
    cout << ans[cx][cy] << endl;
  }
}