#include <stdio.h>
#include <algorithm>
#include <cstring>
using namespace std; //min()使用的时候要特别注意
int maze[25][25],dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}},ans,R,C;
void DFS(int x,int y,int step)
{
if (step>10)
return ;
for (int i=0;i<4;i++)
{
int a=x,b=y,flag=0;
while (a>=0 && a<R && b>=0 && b<C)
{
a+=dir[i][0];
b+=dir[i][1];
flag++;
if (maze[a][b]==3)
{
ans=min(ans,step+1);
return ;
}
if (maze[a][b]==1)
break;
}
if (maze[a][b]==1 && flag>1)
{
maze[a][b]=0;
DFS(a-dir[i][0],b-dir[i][1],step+1);
maze[a][b]=1;
}
}
}
int main()
{
int i,j,R0,C0;
while(scanf("%d%d",&C,&R)!=EOF)
{
if (R==0 && C==0)
break;
memset(maze,0,sizeof(maze));
for (i=0;i<R;i++)
for (j=0;j<C;j++)
{
scanf("%d",&maze[i][j]);
if (maze[i][j]==2)
{R0=i;C0=j;}
}
ans=0x3fffffff;
DFS(R0,C0,0);
if (ans<=10)
printf("%d\n",ans);
else
printf("-1\n");
}
return 0;
}