#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<stack>
#define ll long long
#define N 200000
#include<queue>
using namespace std ;
int a,b;
int vis[30 ][30 ];
int linshi,daan,s_x,s_y,g_x,g_y;
int dir[4 ][2 ]={0 ,-1 ,-1 ,0 ,0 ,1 ,1 ,0 };
int qiang(int x,int y){
if (vis[x][y]==1 )return 1 ;
return 0 ;
}
int chujie(int x,int y){
return (x<0 ||y<0 ||x==b||y==a);
}
void dfs(int x,int y,int n){
if (n>10 )return ;
for (int i=0 ;i<4 ;i++){
int xx=x,yy=y;
xx+=dir[i][0 ];
yy+=dir[i][1 ];
if (chujie(xx,yy)){
continue ;
}
if (qiang(xx,yy)){
continue ;
}
if (xx==g_x&&yy==g_y){
daan=min(daan,n);
continue ;
}
while (1 ){
xx+=dir[i][0 ];
yy+=dir[i][1 ];
if (chujie(xx,yy)){
break ;
}
if (qiang(xx,yy)){
vis[xx][yy]=0 ;
dfs(xx-dir[i][0 ],yy-dir[i][1 ],n+1 );
vis[xx][yy]=1 ;
break ;
}
if (xx==g_x&&yy==g_y){
daan=min(daan,n);
break ;
}
}
}
}
int main(){
freopen("input2.txt" ,"r" ,stdin);
while (scanf ("%d%d" ,&a,&b)&&a!=0 &&b!=0 ){
daan=12 ;
for (int i=0 ;i<b;i++){
for (int j=0 ;j<a;j++){
cin >>linshi;
if (linshi==1 ){
vis[i][j]=1 ;
}
else vis[i][j]=0 ;
if (linshi==2 ){
s_x=i;
s_y=j;
}
else if (linshi==3 ){
g_x=i;
g_y=j;
}
}
}
dfs(s_x,s_y,1 );
if (daan==12 )cout <<"-1\n" ;
else cout <<daan<<endl;
}
return 0 ;
}