#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(n);i++)
#define HMAX 20
#define WMAX 20
using namespace std;

int w,h;

int dd[5]={0,1,0,-1,0};

void dfs_aux(int sx, int sy, int map[WMAX][HMAX],int *min,int count){
  rep(r,4){
    int nx=sx,ny=sy;
    if(map[nx+dd[r]][ny+dd[r+1]]==1)
      continue;
    while(0<=nx+dd[r] && nx+dd[r]<w && 0<=ny+dd[r+1] && ny+dd[r+1]<h){
      nx+=dd[r];
      ny+=dd[r+1];
      if(map[nx][ny]==3)
	if(*min > count){
	  *min = count;
	  break;
	}
      if(map[nx][ny]==1){
	break;
      }
    }
    
    if(map[nx][ny]==1 && count <10){
      map[nx][ny]=0;
      nx-=dd[r];ny-=dd[r+1];
      dfs_aux(nx,ny,map,min,count+1);
      nx+=dd[r];ny+=dd[r+1];
      map[nx][ny]=1;
    }
  }
}  

int dfs(int sx, int sy, int map[WMAX][HMAX]){
  int min=11;
  dfs_aux(sx,sy,map,&min,1);
  if(min>10)
    return -1;
  return min;
}

int main(){
  for(;;){
    scanf("%d %d",&w,&h);
    if(!(w+h)) break;
    int map[WMAX][HMAX],sx,sy;
    rep(i,h){
      rep(j,w){
	scanf("%d",&map[j][i]);
	if(map[j][i]==2){
	  sx=j;
	  sy=i;
	}
      }
    }
    printf("%d\n",dfs(sx,sy,map));
  }
}
#include <iostream>
#include <algorithm>
using namespace std;

int v[22][22], W, H, turn, m;

void dfs(int h, int w){
    if(turn < 11){
        turn++;
    if(v[h][w+1]==0 || v[h][w+1]==3){
        for(int i=1; w+i<W; i++){
            if(v[h][w+i]==3 && turn<m){
                m = turn;
                break;
            }
            if(v[h][w+i]==1){
                v[h][w+i]=0;
                dfs(h, w+i-1);
                v[h][w+i]=1;
                break;
            }
        }
    }
    if(v[h][w-1]==0 || v[h][w-1]==3){
        for(int i=1; w-i>=0; i++){
            if(v[h][w-i]==3 && turn<m){
                m = turn;
                break;
            }
            if(v[h][w-i]==1){
                v[h][w-i]=0;
                dfs(h, w-i+1);
                v[h][w-i]=1;
                break;
            }
        }
    }
    if(v[h+1][w]==0 || v[h+1][w]==3){
        for(int i=1; h+i<H; i++){
            if(v[h+i][w]==3 && turn<m){
                m = turn;
                break;
            }
            if(v[h+i][w]==1){
                v[h+i][w]=0;
                dfs(h+i-1, w);
                v[h+i][w]=1;
                break;
            }
        }
    }
    if(v[h-1][w]==0 || v[h-1][w]==3){
        for(int i=1; h-i>=0; i++){
            if(v[h-i][w]==3 && turn<m){
                m = turn;
                break;
            }
            if(v[h-i][w]==1){
                v[h-i][w]=0;
                dfs(h-i+1, w);
                v[h-i][w]=1;
                break;
            }
        }
    }
    turn--;
    }
}

int main(void){
    int h1, w1;
    while(cin>>W>>H){
        if(W==0 && H==0)    break;
        m = 11;
        for(int i=0; i<H; i++){
            for(int j=0; j<W; j++){
                cin >> v[i][j];
                if(v[i][j]==2){
                    h1=i; w1=j;
                    v[i][j]=0;
                }
            }
        }
        turn = 0;
        dfs(h1, w1);
        if(m==11)cout << -1 << endl;
        else cout << m << endl;
    }
    return 0;
}
