#include<stdio.h>

int Move(int,int,int);

int map[61][61];
int w,h;
int gi,gj;
int main()
{
  int i,j,k;
  while(1){
    scanf("%d%d",&w,&h);
    if(w==0&&h==0)break;
    for(i=0;i<h*2+1;i++){
      for(j=0;j<w*2+1;j++){
        if(i==0||j==0||i==h*2||j==w*2){
          map[i][j]=1;
	}
        else if(i%2==1 &&j%2==0){
          scanf("%d",&map[i][j]);
	}
	else if(i%2==0 &&j%2==1){
          scanf("%d",&map[i][j]);
	}
        else map[i][j]=0;
      }
    }
    /*   for(i=0;i<=h*2;i++){
      for(j=0;j<=w*2;j++){
        printf("%d ",map[i][j]);
      }
      printf("\n");
      }*/
    gj=h*2-1;
    gi=w*2-1;
    for(k=h+w-1;k<h*w;k++){
      if(Move(1,1,k-1)){
        printf("%d\n",k);
        break;
      }
    }
    if(k==h*w)printf("-1\n");
  }
  return 0;
}

int Move(int hh,int ww,int k)
{
  int a1=0,a2=0,a3=0,a4=0;
  if(hh<0||ww<0||hh>h*2+1||ww>w*2+1)return 0;
  if(k<0)return 0;
  if(hh==gj&&ww==gi)return 1;
  if(map[hh+1][ww]==0)a1=Move(hh+2,ww,k-1);
  if(map[hh][ww+1]==0)a2=Move(hh,ww+2,k-1);
  if(map[hh-1][ww]==0)a3=Move(hh-2,ww,k-1);
  if(map[hh][ww-1]==0)a4=Move(hh,ww-2,k-1);
  return a1+a2+a3+a4;
  
}