#include <bits/stdc++.h>
using namespace std;
int maps[9][9],v[9][9];
int sx,sy,step,ans=100;
int n,m;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
bool in(int x,int y)
{
return x>=1&&x<=m&&y>=1&&y<=n;
}
void dfs(int x,int y,int xie)
{
if(xie==0){
return;
}
if(maps[x][y]==3){
ans=min(step,ans);
return;
}
if(maps[x][y]==4){
xie=6;
}
for(int i=0; i<4; i++){
int ddx=x+dx[i];
int ddy=y+dy[i];
if(!v[ddx][ddy]&&maps[ddx][ddy]!=0&&in(ddx,ddy)){
step++;
v[ddx][ddy]=1;
dfs(ddx,ddy,xie-1);
step--;
v[ddx][ddy]=0;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
scanf("%d",&maps[i][j]);
if(maps[i][j]==2){
sx=i,sy=j;
}
}
}
dfs(sx,sy,6);
if(ans==0) printf("-1");
else printf("%d",ans);
return 0;
}