n,m = map(int, input().split())
N = 2 * n + 1
M = 2 * m + 1
g = [[0 for _ in range(M)] for _ in range(N)]
v = [[False for _ in range(M)] for _ in range(N)]
t = [8,4,2,1]
p = [[1,0],[0,1],[-1,0],[0,-1]]
for k in range(n):
l = list(map(int, input().split()))
for idx, i in enumerate(l):
x = 2*k + 1
y = 2*idx + 1
g[x][y] = 1
for idx_, j in enumerate(t):
i -= j
if i >= 0:
nx = x + p[idx_][0]
ny = y + p[idx_][1]
if nx >=0 and ny >=0 and nx < N and ny < M:
g[nx][ny] = 2
else:
i += j
res = 0
r = 0
h = 1
def bfs(i,j):
global res, r, N, M, g, v, h
v[i][j] = True
t = [[0,-2],[2,0],[0,2],[-2,0]]
t_ = [[0,-1],[1,0],[0,1],[-1,0]]
for k in range(4):
dx = i + t[k][0]
dy = j + t[k][1]
dx_ = i + t_[k][0]
dy_ = j + t_[k][1]
if dx >=0 and dy >=0 and dx < N and dy < M and not v[dx][dy] and g[dx_][dy_] == 0:
h += 1
bfs(dx, dy)
for i in range(n):
for j in range(m):
x = 2 * i + 1
y = 2 * j + 1
if not v[x][y]:
res += 1
h = 1
bfs(x,y)
r = max(r, h)
print(res)
print(r)