#include <stdio.h>

#define DIR_UP 		0
#define DIR_DOWN	1
#define DIR_LEFT	2
#define DIR_RIGHT	3

int w,h;
int map[30][30][4];
int tansaku_map[30][30];

int queue_start,queue_end;
int queue[900][2];

int main(void) {
	int i,j;
	int now;
	int x,y;
	while(1) {
		scanf("%d%d",&w,&h);
		if(w==0 && h==0) break;
		for(i=0;i<2*h-1;i++) {
			if(i%2==0) {
				for(j=1;j<w;j++) {
					scanf("%d",&now);
					map[i/2][j][DIR_LEFT]=!now;
					map[i/2][j-1][DIR_RIGHT]=!now;
				}
			} else {
				for(j=0;j<w;j++) {
					scanf("%d",&now);
					map[i/2][j][DIR_DOWN]=!now;
					map[i/2+1][j][DIR_UP]=!now;
				}
			}
		}
		for(i=0;i<h;i++) {
			map[i][0][DIR_LEFT]=0;
			map[i][w-1][DIR_RIGHT]=0;
			for(j=0;j<w;j++) {
				tansaku_map[i][j]=0;
				map[0][j][DIR_UP]=0;
				map[h-1][j][DIR_DOWN]=0;
			}
		}
		queue_start=0;queue_end=1;
		queue[0][0]=0;
		queue[0][1]=0;
		tansaku_map[0][0]=1;
		while(queue_start<queue_end) {
			x=queue[queue_start][0];
			y=queue[queue_start][1];
			queue_start++;
			if(map[y][x][DIR_LEFT] && tansaku_map[y][x-1]==0) {
				queue[queue_end][0]=x-1;
				queue[queue_end][1]=y;
				tansaku_map[y][x-1]=tansaku_map[y][x]+1;
				queue_end++;
			}
			if(map[y][x][DIR_RIGHT] && tansaku_map[y][x+1]==0) {
				queue[queue_end][0]=x+1;
				queue[queue_end][1]=y;
				tansaku_map[y][x+1]=tansaku_map[y][x]+1;
				queue_end++;
			}
			if(map[y][x][DIR_UP] && tansaku_map[y-1][x]==0) {
				queue[queue_end][0]=x;
				queue[queue_end][1]=y-1;
				tansaku_map[y-1][x]=tansaku_map[y][x]+1;
				queue_end++;
			}
			if(map[y][x][DIR_DOWN] && tansaku_map[y+1][x]==0) {
				queue[queue_end][0]=x;
				queue[queue_end][1]=y+1;
				tansaku_map[y+1][x]=tansaku_map[y][x]+1;
				queue_end++;
			}
		}
		printf("%d\n",tansaku_map[h-1][w-1]);
	}
	return 0;
}