#include<cstdio>
#include<iostream>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int map[111][111];
int ans;
int w,h;
int judge(int x,int y)
{
    if(x>=0&&x<h&&y>=0&&y<w)  
        return 1;  
    return 0; 
}
void dfs(int x,int y,int step)
{
	if(step>10)
		return;
	for(int i=0;i<4;i++)
	{
		int nowx=x+dx[i];
		int nowy=y+dy[i];
		if(map[nowx][nowy]!=1&&judge(nowx,nowy))
		{
			nowx=x;
			nowy=y;
			while(1)
			{
				nowx+=dx[i];
				nowy+=dy[i];
				if(!judge(nowx,nowy))
					break;
				if(map[nowx][nowy]==3)
				{
					ans=min(ans,step);
					return;
				}
				if(map[nowx][nowy]==1)
				{
					map[nowx][nowy]=0;
					dfs(nowx-dx[i],nowy-dy[i],step+1);
					map[nowx][nowy]=1;//回溯
					break;//??跳出 
				}
			}
		}
	}
}
int main()
{
	int sx,sy;
	while(~scanf("%d",&w,&h)&&w&&h)
	{
		for(int i=0;i<h;i++)
			for(int j=0;j<w;j++)
			{
				scanf("%d",&map[i][j]);
				if(map[i][j]==2)
				{
					sx=i;
					sy=j;
				}
			}
		ans=INF;
		dfs(sx,sy,1);
		if(ans==INF)
			printf("-1\n");
		else
			printf("%d\n",ans);
	}
	return 0;	
}