#include<bits/stdc++.h>
using namespace std;
int n,m,a[91][91],cx,cy,jx,jy,sum=0xffff,ti;
int c[5][2]={{0,1},{1,0},{0,-1},{-1,0}};
bool g;
int o=-1;
int bu,b[81][81];
void dfs(int x,int y,int s){
if(s==0||ti>=sum||ti>bu)
return;
if(a[x][y]==4)
s=6;
if(x==jx&&y==jy&&ti<sum)
{
sum=ti;
return;
}
for(int i=0;i<4;i++)
{
int q=x+c[i][0];
int w=y+c[i][1];
if(q<1||q>n||w>m||w<1||a[q][w]==0||s-1<=b[q][w])
continue;
ti++;
b[q][w]=s-1;
dfs(q,w,s-1);
ti--;
}
}
int main(){
scanf("%d%d",&n,&m);
bu=n*m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
if(a[i][j]==2)
cx=i,cy=j;
if(a[i][j]==3)
jx=i,jy=j;
}
}
b[cx][cy]=6;
dfs(cx,cy,6);
if(sum==0xffff)
printf("%d",o);
else
printf("%d",sum);
return 0;
}