import collections
direction = [[0,1],[1,0],[-1,0],[0,-1]]
area = 0
def dfs(grap,x,y,visit,num):
if visit[x][y] :
return
global area
area+=1
visit[x][y] = True
grap[x][y] = num
for i ,j in direction:
curx = i+x
cury = j+y
if 0<=curx<len(grap) and 0<=cury<len(grap[0]) and grap[curx][cury] == 1:
dfs(grap,curx,cury,visit,num)
def main():
global area
n,m = map(int,input().split())
grap = []
visit = [[False]*m for i in range(n)]
num = collections.defaultdict(int)
cnt = 2
for i in range(n):
grap.append(list(map(int,input().split())))
for i in range(n):
for j in range(m):
if grap[i][j] == 1:
area = 0
dfs(grap,i,j,visit,cnt)
num[cnt] = area
cnt += 1
res = 0
for i in range(n):
for j in range(m):
if grap[i][j] == 0:
maxnum = 1
a = set()
for k,t in direction:
if 0<=i+k<len(grap) and 0<= j+t <len(grap[0]) and grap[i+k][j+t] !=0 and grap[i+k][j+t] not in a:
a.add(grap[i+k][j+t])
maxnum += num[grap[i+k][j+t]]
res = max(res,maxnum)
if res == 0:
return max(num.values())
return res
if __name__ == '__main__':
print(main())