#include<iostream>
int hang,lie;
int data[20][20];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int sx,sy,ex,ey;
int flag;
int min=20;
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]/*==0&&data[nx][ny]==2*/)
{
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;
continue;
}
}
}
int main()
{
freopen("input.txt","r",stdin);
while(scanf("%d%d",&lie,&hang)!=EOF)
{ min=20;
for(int i=0;i<20;i++)
for(int j=0;j<20;j++)
data[i][j]=-1;
if(hang==0&&lie==0)
break;
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)
{sx=i;
sy=j;
}
}
}
dfs(sx,sy,0);
if(min==20)
{ printf("%d\n",-1);}
else
{
printf("%d\n",min);
}
}
}