#include<iostream>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;
int p[25][25];
int m,n;
int mins;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void dfs(int x,int y,int step)
{
    step++;
    if(step>10)
        return ;
    for(int k=0;k<4;k++)
    {
        int nx=x+dx[k];
        int ny=y+dy[k];
        if(p[nx][ny]==1)
            continue;
        while(p[nx][ny]==0||p[nx][ny]==2)
        {
            nx+=dx[k];
            ny+=dy[k];
        }
        if(p[nx][ny]==-1)
            continue;
        if(p[nx][ny]==1)
        {
            p[nx][ny]=0;
            dfs(nx-dx[k],ny-dy[k],step);
            p[nx][ny]=1;
        }
        if(p[nx][ny]==3)
        {
            if(step<mins)
                mins=step;
        }
    }
}
int main()
{
    while(cin>>n>>m&&(n!=0||m!=0))
    {
        mins=inf;
        memset(p,-1,sizeof(p));
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++)
            cin>>p[i][j];
        for(int i=1;i<=m;i++)
            for(int j=1;j<=n;j++)
            if(p[i][j]==2)
            {
                dfs(i,j,0);
            }
            if(mins<inf)
                cout<<mins<<endl;
            else
                cout<<"-1"<<endl;
    }
    return 0;
}

