#include<iostream>
using namespace std;
int data[20][20];
int sx,sy;
int m,n;//m行n列
int minstep;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
void dfs(int x, int y, int step)
{
if(step==11)
return;
if(step>=minstep)
return;
for(int i=0;i<4;i++)
{
int nx,ny;
nx=x+dx[i];
ny=y+dy[i];
if(data[nx][ny]==1||nx<0||nx>=m||ny<0||ny>=n)
continue;
while(1)
{
if(data[nx][ny]==3)
{
if(step<minstep)
minstep=step;
return;
}
if(i==0&&nx==0)
break;
if(i==1&&ny==n-1)
break;
if(i==2&&nx==m-1)
break;
if(i==3&&ny==0)
break;
else if(data[nx+dx[i]][ny+dy[i]]==1)
{
data[nx+dx[i]][ny+dy[i]]=0;
dfs(nx,ny,step+1);
data[nx+dx[i]][ny+dy[i]]=1;
break;
}
nx=nx+dx[i];
ny=ny+dy[i];
}
}
}
int main()
{
//freopen("input.txt","r",stdin);
while(cin>>n>>m)
{
if(n==0||m==0)
break;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>data[i][j];
if(data[i][j]==2)
{
sx=i;
sy=j;
data[i][j]=0;
}
}
}
minstep=9999;
dfs(sx,sy,1);
if(minstep==9999)
cout<<"-1"<<endl;
else
cout<<minstep<<endl;
}
return 0;
}