#include <vector>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <cstring>
#include <deque>
#include <cstdio>
#include <cmath>
#include <complex>
#include <iostream>
#include <iterator>
 
using namespace std;
 
#define reep(i,f,t) for(int i=f ; i<int(t) ; ++i)
#define rep(i,n) reep(i, 0, n) 
 
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int,int> pii;
 
char field[128][128];
int memo[128][128];
int w, h;
 
void fillup(int y, int x, int num, char c)
{
    memo[y][x] = num;
     
    const int dy[] = {-1, 0, 0, 1};
    const int dx[] = {0, 1, -1, 0};
     
    rep(i, 4){
        int py = y + dy[i];
        int px = x + dx[i];
        if(py<0 || h<=py || px<0 || w<=px || (memo[py][px] != -2 && memo[py][px] != -1))
            continue;
         
        if(field[py][px] != c)
            memo[py][px] = -2;
        else
            fillup(py, px, num, c);
    }
}
 
int main()
{
    while(scanf("%d%d", &w, &h), w){
        int y, x;
        rep(i, h){
            scanf("%s", field[i+1]+1);
            rep(j, w){
                if(field[i+1][j+1] == '&'){
                    y = i + 1;
                    x = j + 1;
                    field[y][x] = '.';
                }
            }
        }
         
        h += 2;
        w += 2;
        fill_n(field[0], w, '.');
        fill_n(field[h-1], w, '.');
        rep(i, h)
            field[i][0] = field[i][w-1] = '.';
         
        rep(i, h)
            fill_n(memo[i], w, -1);
         
        memo[y][x] = -2;
        for(int i=0;; ++i){
            const char chars[] = {'#', '.'};
            bool found = false;
            rep(l, 2){
                rep(j, h) rep(k, w){
                    if(field[j][k] == chars[l] && memo[j][k] == -2){
                        found = true;
                        fillup(j, k, i, chars[l]);
                    }
                }
            }
            if(!found)
                break;
        }
        printf("%d\n", memo[0][0]);
    }
 
    return 0;
}