#include<stdio.h>
int map[99][99];
int mov1[4]={1,0,-1,0};
int mov2[4]={0,-1,0,1};
int sx;
int sy;
int ex;
int ey;
int X;
int Y;
int min;
void milu(int x,int y,int step)
{
if(step>min)
return;
if(step==10)
return;
for(int i=0;i<4;i++)
{
int nx=x+mov1[i];
int ny=y+mov2[i];
if(map[nx][ny]==1)
continue;
int flagg=0;
while(map[nx][ny]==0)
{
nx+=mov1[i];
ny+=mov2[i];
if(nx<0||nx>=X||ny<0||ny>=Y)
{
flagg=1;
break;
}
}
if(flagg==1)
continue;
if(map[nx][ny]==3)
{
if(min>step)
min=step;
return ;
}
else if(map[nx][ny]==1)
{
map[nx][ny]=0;
}
milu(nx-mov1[i],ny-mov2[i],step+1);
if(map[nx][ny]==0)
map[nx][ny]=1;
}
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&Y,&X))
{
min=999;
if(Y==0&&X==0)
break;
for(int i=0;i<X;i++)
{
for(int j=0;j<Y;j++)
{
scanf("%d",&map[i][j]);
if(map[i][j]==2)
{
sx=i;
sy=j;
map[i][j]=0;
}
}
}
milu(sx,sy,0);
if(min==999)
printf("-1\n");
else
printf("%d\n",min+1);
}
return 0;
}