#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);
			  }
			
  
	}

}