#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <utility>
#include <functional>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <deque>
#include <ctime>
  
using namespace std;
  
#define rep(i,n) REP(i,0,n)
#define REP(i,s,e) for(int i=(s); i<(int)(e); i++)
#define pb push_back
#define mp make_pair
#define all(r) r.begin(),r.end()
#define rall(r) r.rbegin(),r.rend()
#define fi first
#define se second
#define println(X) cout<<X<<endl;
#define DBG(X) cout<<#X<<" : "<<X<<endl;
  
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vii;
typedef vector<ll> vl;
typedef vector<vl> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
 
const int INF = 1e9;
const ll MOD = 1e9 + 7;
double EPS = 1e-3;
const double PI = acos(-1);
 
int dx[]={-1,0,1,0};
int dy[]={0,-1,0,1};
 
double h, w;
char C[210][210];
 
int d[210][210];
 
bool isOutOfRange(int x, int y){
    if(x <= 0 || x > w || y<= 0 || y > h) return true;
    return false;
}
 
int main(){
    pii p;
    int x, y, nx, ny, c, nc;
    int gx, gy;
    while(cin>>w>>h && h && w){
        rep(i, h) scanf("%s", C[i]);
        //cout<<h<<" "<<w<<endl;
        rep(i, h) rep(j, w) if(C[i][j]=='&') gx = j, gy = i;
        gx++; gy++;
        rep(i, 210) rep(j, 210) d[i][j] = -1;
        priority_queue<pii/*, vector<pii>, greater<pii>*/ > q;
        rep(i, h) q.push(mp(0, (i+1)*1000)), q.push(mp(0, (i+1)*1000+w+1));
        rep(i, w) q.push(mp(0, i+1)), q.push(mp(0, (h+1)*1000+i+1));
        while(!q.empty()){
            p = q.top(); q.pop();
            y = p.se/1000;
            x = p.se%1000;
            c = p.fi;
            rep(i, 4){
                nx = x + dx[i];
                ny = y + dy[i];
                if(isOutOfRange(nx, ny)) continue;
                nc = c + (C[ny-1][nx-1]=='#'?1:0);
                if(d[ny][nx]!=-1 && d[ny][nx] <= nc) continue;
                d[ny][nx] = nc;
                //if(ny==gy && nx == gx) continue;
                q.push(mp(nc, ny*1000+nx));
            }
        }
        cout<<d[gy][gx]<<endl;  
    }
}