# 아기 상어 2
import sys
from collections import deque
def bfs(i, j):
global visited_value
q = deque()
dist = 0
visited_value += 1
visited[i][j] = visited_value
q.append([i, j])
while q:
dist += 1
for _ in range(len(q)):
i, j = q.popleft()
for a in range(8): # 8방향 각각의 경우에 대해서
ni, nj = i + di[a], j + dj[a]
# 방문하지 않은 경우만
if 0 <= ni < N and 0 <= nj < M and visited[ni][nj] < visited_value:
if arr[ni][nj] == 1: # 상어가 존재하면 해당 값 distance return
return dist
else: # 방문 처리 및 연결된 정보 주입
q.append([ni, nj])
visited[ni][nj] = visited_value
return dist - 1
N, M = map(int, input().split())
arr = [list(map(int, sys.stdin.readline().rstrip().split())) for _ in range(N)]
visited = [[0] * M for _ in range(N)]
di = [0, 0, -1, 1, -1, -1, 1, 1]
dj = [-1, 1, 0, 0, -1, 1, -1, 1]
visited_value = 0
max_dist = 0
for i in range(N):
for j in range(M):
if arr[i][j] == 0: # 상어가 없는 node부터 시작해서
max_dist = max(max_dist, bfs(i, j)) # 최대값 갱신
print(max_dist)