#include<bits/stdc++.h>
using namespace std;
//queue<int> x,y;
int sx,sy,ex,ey;
int n,m,a[11][11],hp,ans=999999,now;
int dx[4]={0,-1,0,1};
int dy[4]={1,0,-1,0};
void dfs(int x,int y){
if(now>=ans) return ;
if(x==ex&&y==ey){
ans=now;
return ;
}
if(hp==1){
if(a[x+1][y]!=4&&a[x-1][y]!=4&&a[x][y+1]!=4&&a[x][y-1]!=4){
return ;
}
}
for(int i=0;i<=3;i++){
int nx=x+dx[i];
int ny=y+dy[i];
now++;
hp--;
if(a[nx][ny]=4) hp=6;
if(a[nx][ny]!=0&&(!(nx<1||nx>n||ny<1||ny>m))){
dfs(nx,ny);
}
now--;
if(a[nx][ny]!=4) hp++;
}
}
int main()
{
hp=6;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]==2) sx=i,sy=j;
if(a[i][j]==3) ex=i,ey=j;
}
}
dfs(sx,sy);
cout<<ans;
return 0;
}