#include<stdio.h>
#define SIZE 10000
int sx,sy;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int fmaps[25][25]={0};
int h,w;
typedef struct{
  int x;
  int y;
  int maps[25][25];
  int point;
}Zahyo;
Zahyo z[SIZE];
main(){
  while(1){
    scanf("%d %d",&w,&h);
    if(h==0&&w==0)break;
    int i,j;
    for(i=0;i<h;i++){
      for(j=0;j<w;j++){
	scanf("%d",&fmaps[i][j]);
	if(fmaps[i][j]==2){
	  sx=j;
	  sy=i;
	}
      }
    }
    int head=0,tail=0;
    z[0].x=sx;
    z[0].y=sy;
    z[0].point=0;
    for(i=0;i<25;i++){
      for(j=0;j<25;j++){
	z[0].maps[i][j]=fmaps[i][j];
      }
    }
    tail++;
    int flag=0;
    while(head!=tail){
      Zahyo now=z[head];head=(head+1)%SIZE;//pop
      int x=now.x;
      int y=now.y;
      /*
      printf("%d %d %d\n",x,y,now.point);
      for(i=0;i<h;i++){
	for(j=0;j<w;j++){
	  printf("%d ",now.maps[i][j]);
	}
	printf("\n");
      }
      */
      if(x>=0&&y>=0&&x<w&&y<h){
	if(now.maps[y][x]==3){
	  if(now.point<=10){
	    printf("%d\n",now.point);
	    flag=1;
	  }
	  break;
	}
	for(i=0;i<4;i++){
	  int nx=x;
	  int ny=y;
	  if(now.maps[y+dy[i]][x+dx[i]]!=1){
	    while(now.maps[ny][nx]!=1&&now.maps[ny][nx]!=3&&nx>=0&&ny>=0&&nx<w&&ny<h){
	      nx+=dx[i];
	      ny+=dy[i];
	    }
	  }
	  Zahyo tmp=now;
	  tmp.x=nx;
	  tmp.y=ny;
	  tmp.point++;
	  if(nx>=0&&ny>=0&&nx<w&&ny<h){
	    if(tmp.maps[ny][nx]==1){
	      tmp.maps[ny][nx]=0;
	      tmp.x-=dx[i];
	      tmp.y-=dy[i];
	    }
	  }
	  z[tail+i]=tmp;
	}
	tail=(tail+4)%SIZE;
      }
    }
    if(flag==0){
      printf("%d\n",-1);
    }
  }
}