from heapq import heappop, heappush h, w = map(int, input().split()) a = [list(map(int, input().split())) for _ in range(h - 2)] # 最小カットするのは面倒なので、左から右にpathを通して切る distance = [[-1] * w for _ in range(h - 2)] heap_queue = [] for i in range(h - 2): if a[i][0] >= 0: heappush(heap_queue, (a[i][0], i * w)) while len(heap_queue): d, ij0 = heappop(heap_queue) i0, j0 = ij0 // w, ij0 % w if distance[i0][j0] == -1: distance[i0][j0] = d else: continue # 8方向にpath for i1 in range(max(0, i0 - 1), min(h - 2, i0 + 2)): for j1 in range(max(0, j0 - 1), min(w, j0 + 2)): if i1 == i0 and j1 == j0: continue if a[i1][j1] >= 0 and distance[i1][j1] == -1: heappush(heap_queue, (distance[i0][j0] + a[i1][j1], i1* w + j1)) res_list = [distance[i][-1] for i in range(h - 2)] if max(res_list) == -1: print(-1) else: print(min([r for r in res_list if r >= 0]))