#include<iostream>
#include<cstring>
using namespace std;
int x[4]={1,-1,0,0},y[4]={0,0,1,-1};
int point[11][11],ji[11][11];
int xie=6,time=0,f,minn=9999999;
int m,n,c,d;
void run(int a,int b)
{
if(ji[a][b]==0) return;
if(point[a][b]==3)
{
if(time<minn) minn=time;
}
if(a<1||a>n||b<1||b>m)
{
return;
}
if(point[a][b]==0)return;
if(xie==0)return;
xie--;
if(point[a][b]==4) xie=6;
time++;
ji[a][b]=0;
for(int i=0;i<4;i++)
{
run(a+x[i],b+y[i]);
a-=x[i];
b-=y[i];
xie--;
time++;
ji[a+x[i]][b+y[i]]=1;
}
}
int main()
{
memset(ji,1,sizeof(ji));
f=minn;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>point[i][j];
if(point[i][j]==2)
c=i;
d=j;
}
}
run(c,d);
if(minn==f) cout<<-1;
else cout<<minn;
return 0;
}