# Name: Set Kaung Lwin # ID: 6632017 # Sec: 543 rows,columns = map(int,input().split()) image = [[] for _ in range(rows)] for current_row in range(len(image)): image[current_row] = list(map(int,input().split())) from disjointsets3 import DisjointSets def printImage(m): for i in m: print(i) moves =[(-1,0),(1,0),(0,1),(0,-1)] # up down right left def isValid(tr,tc): return tr >= 0 and tr < rows and tc >=0 and tc < columns def sides(r,c): valid_moves = [] for (i,j) in moves: target_row = r+i target_column = c+j if isValid(target_row,target_column): valid_moves.append((target_row,target_column)) return valid_moves ds = DisjointSets(rows*columns) largest = 0 for current_row in range(len(image)): for current_column in range(len(image[current_row])): if image[current_row][current_column] == 1: for (neighbor_row,neighbor_col) in sides(current_row,current_column): if image[neighbor_row][neighbor_col] == 1: ds.union( ( neighbor_row*columns+neighbor_col ) , ( current_row*columns+current_column ) ) sizes = {} for current_row in range(rows): for current_column in range(columns): if image[current_row][current_column] == 1: representative = ds.findset(current_row*columns+current_column) if representative in sizes: sizes[representative] += 1 else: sizes[representative] = 1 largest = max(sizes[representative],largest) print(largest)