#include<cstdio>
int a[10][10];
int vis[10][10];
int x1[4]={0,0,1,-1};
int y1[4]={1,-1,0,0};
int n,m,q,d;
int qwq=100;
void dfs(int x,int y,int sum,int ans)
{
if(a[x][y]==3&&ans<qwq)
{
qwq=ans;
return;
}
if(sum<=1||ans>=qwq)
{
return;
}
for(int i=0;i<4;i++)
{
int xx=x+x1[i];
int yy=y+y1[i];
if(xx>=0&&xx<n&&yy>=0&&yy<m&&a[xx][yy]!=0&&vis[xx][yy]==0)
{
vis[xx][yy]=1;
if(a[xx][yy]==4){
sum=6;
dfs(xx,yy,sum,ans++);
}
else
{
dfs(xx,yy,sum--,ans++);
}
vis[xx][yy]=0;
}
}
return;
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
if(a[i][j]==2)
{
q=i;d=j;
}
}
}
vis[q][d]=1;
dfs(q,d,6,0);
if(qwq==100)printf("-1");
else printf("%d",qwq);
return 0;
}