#include<iostream>
#include<algorithm>
#define INF 100000000
using namespace std;

void dfs(int x,int y,int muki,int count);
int W,H;
int mas[20][20];
int gx,gy;
int sx,sy;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int ata;
int cnt;
int main(){
  while(1){
    cnt=INF;
    cin>>W>>H;
    if(W==0 && H==0) break;
    for(int i=0;i<H;i++){
      for(int j=0;j<W;j++){
	cin>>mas[i][j];
	if(mas[i][j]==2){
	  sx=j;
	  sy=i;
	  mas[i][j]=0;
	}
	if(mas[i][j]==3){
	  mas[i][j]=0;
	  gx=j;
	  gy=i;
	}
      }
    }
    ata=0;
    dfs(sx,sy,-1,0);
    if(cnt==INF){
      cout<<-1<<endl;
    }else{
      cout<<cnt<<endl;
    }
  }
}

void dfs(int x,int y,int muki,int count){
  if(count>10){
    return;
  }
  if(x==gx && y==gy){
    //cout<<count<<endl;
    if(cnt>count){
      cnt=count;
    }
    return;
  }
  if(ata==0){
    for(int i=0;i<4;i++){
      int nextx=x+dx[i];
      int nexty=y+dy[i];
      if(0<=nextx && nextx<W && 0<=nexty && nexty<H && mas[nexty][nextx]==0){
	//cout<<x<<' '<<y<<endl;
	ata=1;
	dfs(nextx,nexty,i,count+1);
      }
    }
    
  }else{
    int nextx=x+dx[muki];
    int nexty=y+dy[muki];
    if(0<=nextx && nextx<W && 0<=nexty && nexty<H){
      if(mas[nexty][nextx]==1){
	mas[nexty][nextx]=0;
	ata=0;
	dfs(x,y,-1,count);
	mas[nexty][nextx]=1;
      }else if(mas[nexty][nextx]==0){
	dfs(nextx,nexty,muki,count);
      }
    }
  }
  return;
}
  