//Important to delegate bound checks
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
public class Solution {
static class Counter{
int value = 0;
}
// Complete the maxRegion function below.
static int maxRegion(int[][] grid) {
int maxRegion = 0;
Counter actualRegion = new Counter();
for(int i=0; i<grid.length; i++){
for(int j=0; j<grid[i].length; j++){
if(grid[i][j]==1){
calculateRegion(i,j,grid,actualRegion);
maxRegion = Math.max(maxRegion, actualRegion.value);
actualRegion.value=0;
}
}
}
return maxRegion;
}
static void calculateRegion(int i, int j, int[][] grid, Counter c){
if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length) return;
if(grid[i][j]==0) return;
c.value++;
grid[i][j] = 0;
calculateRegion(i-1, j, grid, c);
calculateRegion(i+1, j, grid, c);
calculateRegion(i, j+1, grid, c);
calculateRegion(i-1, j+1, grid, c);
calculateRegion(i+1, j+1, grid, c);
calculateRegion(i, j-1, grid, c);
calculateRegion(i-1, j-1, grid, c);
calculateRegion(i+1, j-1, grid, c);
return;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
int n = scanner.nextInt();
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
int m = scanner.nextInt();
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
int[][] grid = new int[n][m];
for (int i = 0; i < n; i++) {
String[] gridRowItems = scanner.nextLine().split(" ");
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
for (int j = 0; j < m; j++) {
int gridItem = Integer.parseInt(gridRowItems[j]);
grid[i][j] = gridItem;
}
}
int res = maxRegion(grid);
bufferedWriter.write(String.valueOf(res));
bufferedWriter.newLine();
bufferedWriter.close();
scanner.close();
}
}