(1회차 시도 성공!)
import java.io.*;
import java.util.*;
public class Main {
static boolean[][] visited;
static int[] dy = {-1,-1,-1,0,0,1,1,1};
static int[] dx = {-1,0,1,-1,1,-1,0,1};
static int[][] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
arr = new int[n][m];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < m; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
visited = new boolean[n][m];
int max = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if(arr[i][j] != 1){
visited = new boolean[n][m];
max = Math.max(max, bfs(i, j, n, m));
}
}
}
bw.write(max+"");
br.close();
bw.close();
}
private static int bfs(int i, int j, int n, int m) {
Queue<int[]> q = new LinkedList<>();
q.add(new int[]{i, j, 0});
visited[i][j] = true;
while(!q.isEmpty()){
int[] pos = q.poll();
for (int k = 0; k < 8; k++) {
int ny = dy[k] + pos[0];
int nx = dx[k] + pos[1];
int nz = pos[2] + 1;
if(ny >= 0 && ny < n && nx >= 0 && nx < m && !visited[ny][nx]){
if(arr[ny][nx] == 1){
return nz;
}
visited[ny][nx] = true;
q.add(new int[]{ny, nx, nz});
}
}
}
return 0;
}
}