#include <iostream>
using namespace std;

int dx[]={-1,0,1,0};
int dy[]={0,-1,0,1};

#define INF (1<<24)

int f[30][30],W,H;

int dfs(int x, int y, int c, bool gf)
{
	if(gf) return c;
	if(c>=10) return INF;

	int ret=INF;
	for(int i=0; i<4; i++)
	{
		int tx=x, ty=y;
		bool gf=false;
		while(1)
		{
			tx+=dx[i], ty+=dy[i];
			if(tx<0||ty<0||tx>=W||ty>=H) break;
			if(f[tx][ty]==3) gf=1;
			if(f[tx][ty]==1) break;
		}

		if(gf)
		{
			ret=min(ret, dfs(tx,ty,c+1,gf));
		}
		else
		{
			if(tx<0||ty<0||tx>=W||ty>=H) continue;
			if(x==tx-dx[i]&&y==ty-dy[i]) continue;
			f[tx][ty]=0;
			tx-=dx[i], ty-=dy[i];

			ret=min(ret, dfs(tx,ty,c+1,gf));

			tx+=dx[i], ty+=dy[i];

			f[tx][ty]=1;
		}
	}

	return ret;
}

int main()
{

	while(cin >> W >> H, (W||H))
	{
		int sx,sy;
		for(int i=0; i<H; i++)
		for(int j=0; j<W; j++)
		{
			cin >> f[j][i];
			if(f[j][i]==2)
			{
				sx=j;
				sy=i;
			}
		}

		int ret=dfs(sx,sy,0,0);
		cout << (ret==INF?-1:ret) << endl;
	}
}