from collections import deque
N, M = map(int, input().split())
lst = []
for i in range(M):
lst.append(list(map(int,(input().split()))))
# 상하좌우
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
cnt = 0
queue = deque()
for i in range(M):
for j in range(N):
if lst[i][j]==1:
queue.append((i, j))
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# 지역 밖을 벗어나거나, 벽일 경우에 차단
if nx < 0 or nx >= M or ny < 0 or ny >= N or lst[nx][ny]==-1 :
continue
# 0을 만났을 경우
if lst[nx][ny] == 0:
# 1을 만난 친구에게 -> 나의 값 +1
lst[nx][ny] = lst[x][y] +1
# 새로 만난 친구의 좌표를 queue에 저장
queue.append((nx, ny))
for i in range(M):
for j in range(N):
if lst[i][j]==0:
print(-1)
exit()
print(max(map(max, lst)) - 1)