
#include <bits/stdc++.h>
using namespace std;
int a[505][505],n,m,ans = 999999;
bool vis[505][505];
void dfs(int x,int y,int sum,int mouse) {
  if(mouse==0 || a[x][y]==0 || vis[x][y]==0) return;   
  if(x<1 || x>n || y<1 || y>m) return;   
  if(sum > ans) return;   
  if(a[x][y] == 3) {   
    ans = min(ans,sum); 
    return;
  }
  int mouse1 = mouse-1;
  if (a[x][y] == 4) mouse1 = 5; 
  vis[x][y] = false;   
  dfs(x-1,y,sum+1,mouse1);   
  dfs(x+1,y,sum+1,mouse1);  
  dfs(x,y-1,sum+1,mouse1);   
  dfs(x,y+1,sum+1,mouse1);  
  vis[x][y] = true;   
}
int main() {
  scanf("%d%d",&n,&m);
  int x,y;
  for(int i=1; i<=n; i++)
    for(int j=1; j<=m; j++)
	{
        scanf("%d",&a[i][j]);
      	if (a[i][j] == 2)
	  	{
	  		x=i;
			y=j; 
	  	}   
    }
  dfs(x,y,0,6);
  if (ans == 999999) printf("-1");   
  else printf("%d",ans);
}
自己debug没看出来呀……