#include<vector>
#include<list>
#include<algorithm>
#include<iostream>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
int f(int a[][22],int x,int y,int vx,int vy,int p){
  int i;
  int mn=11;
  if(p<11){
    for(i=1;;i++){
      if(0){
      }else if(a[x+vx*i][y+vy*i]==-1){
	break;
      }else if(a[x+vx*i][y+vy*i]==1){
	if(i==1)
	  break;
	a[x+vx*i][y+vy*i]=0;
	int t;
	t=f(a,x+vx*(i-1),y+vy*(i-1),-1,0,p+1);
	if(mn>t)
	  mn=t;
	t=f(a,x+vx*(i-1),y+vy*(i-1),0,-1,p+1);
	if(mn>t)
	  mn=t;
	t=f(a,x+vx*(i-1),y+vy*(i-1),1,0,p+1);
	if(mn>t)
	  mn=t;
	t=f(a,x+vx*(i-1),y+vy*(i-1),0,1,p+1);
	if(mn>t)
	  mn=t;
	a[x+vx*i][y+vy*i]=1;
	break;
      }else if(a[x+vx*i][y+vy*i]==3){
	mn=p;
	break;
      }
    }
  }
  return mn;
}
int main(){
  int i,j;
  int a[22][22],w,h,sx,sy;
  int mn;
  while(cin>>w>>h&&w+h){
    memset(a,-1,sizeof(a));
    for(i=1;i<h+1;i++){
      for(j=1;j<w+1;j++){
	cin>>a[j][i];
	if(a[j][i]==2){
	  a[j][i]=0;
	  sx=j;
	  sy=i;
	}
      }
    }
    mn=11;
    int t;
    t=f(a,sx,sy,-1,0,1);
    if(mn>t)
      mn=t;
    t=f(a,sx,sy,0,-1,1);
    if(mn>t)
      mn=t;
    t=f(a,sx,sy,1,0,1);
    if(mn>t)
      mn=t;
    t=f(a,sx,sy,0,1,1);
    if(mn>t)
      mn=t;
    if(mn==11)
      cout<<-1<<endl;
    else
      cout<<mn<<endl;
  }
  return 0;
}