from collections import deque import bisect import heapq h,w = map(int, input().split()) h-=2 a = [] M = 10**18 for _ in range(h): aa = list(map(int, input().split())) for i in range(w): if(aa[i]==-1): aa[i] = M a.append(aa) hh = [] weight = [[M for _ in range(w)] for _ in range(h)] for i in range(h): hh.append((a[i][0], 0, i)) weight[i][0] = a[i][0] heapq.heapify(hh) while(hh): ww, x, y = heapq.heappop(hh) if(weight[y][x] < ww): continue for dy in range(-1,2): yy = y+dy if(yy<0 or h<=yy): continue for dx in range(-1,2): xx = x+dx if(xx<0 or w<=xx): continue w_new = ww+a[yy][xx] if(weight[yy][xx] > w_new): weight[yy][xx] = w_new heapq.heappush(hh, (w_new, xx, yy)) ans = M for i in range(h): ans = min(ans, weight[i][-1]) if(ans >= M): print(-1) else: print(ans)