#include<iostream>
int hang,lie;
int data[25][25];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int sx,sy,ex,ey;
int flag;
int min=1000000;
void dfs(int x,int y,int step)
{
if(step>=10)
return;
for(int i=0;i<4;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(/*nx>=0&&nx<hang&&ny>=0&&ny<lie&&*/data[nx][ny]==1)
continue;
while(!data[nx][ny])
{
nx+=dx[i];
ny+=dy[i];
}
if(nx>=0&&nx<hang&&ny>=0&&ny<lie)
{
if(data[nx][ny]==1)
{
data[nx][ny]=0;
dfs(nx-dx[i],ny-dy[i],step+1);
data[nx][ny]=1;
}
}
if(data[nx][ny]==3)
{
if(min>step+1)
min=step+1;
}
}
}
int main()
{
freopen("input.txt","r",stdin);
while(scanf("%d%d",&lie,&hang),lie&&hang)
{ min = 1000000;//
for(int i=0;i<25;i++)
for(int j=0;j<25;j++)
data[i][j]=-1;
for(int i=0;i<hang;i++)
for(int j=0;j<lie;j++)
scanf("%d",&data[i][j]);
for(int i=0;i<hang;i++)
{ for(int j=0;j<lie;j++)
{
if(data[i][j]==2)
{
data[i][j]=0;
sx=i;
sy=j;
}
}
}
dfs(sx,sy,0);
if(min < 1000000)
printf("%d\n",min) ;
else
printf("-1\n") ;
}
}