#include<bits/stdc++.h>
using namespace std;
int b[10][10]={{1,0},{0,1},{-1,0},{0,-1}},ans=INT_MAX,n,m,t,x1,yy1,x2,y2,a[10][10][110];
int v[1001][1001];
void dfs(int x,int y,int s,int h){
//cout<<x<<" "<<y<<"\n";
if(v[x][x]==3){ans=s;return;}
if(v[x][y]==4) h=6;
if(v[x][y]==0||h<=1||s>=ans||s>=a[x][y][h]) return;
a[x][y][h]=s;
for(int i=0;i<4;i++){
int nx=x+b[i][0];
int ny=y+b[i][1];
dfs(nx,ny,s+1,h-1);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>v[i][j];
if(v[i][j]==2) x1=i,yy1=j;
}
}
// if(v[x2][y2]){
// cout<<"0";
// return 0;
// }
memset(a,63,sizeof(a));
dfs(x1,yy1,0,6);
cout<<ans;
return 0;
}