20260412
//#include <stdio.h>
//
//int map[100][100] = {};
//int queue[2][100] = {};
//int rear = 0, front = 0;
//
//void pop()
//{
// queue[0][rear] = 0;
// queue[1][rear] = 0;
// rear++;
//}
//
//void push(int x, int y)
//{
// queue[0][front] = x;
// queue[1][front] = y;
// front++;
//}
//
//
//int main()
//{
// int N = 0, M = 0, i = 0;
// int currX, currY;
// scanf("%d %d", &N, &M);
// for (int i = 1; i <= N; i++) {
// for (int j = 1; j <= M; j++) {
// scanf("%1d", &map[i][j]);
// }
// }
//
// currX = 1;
// currY = 1;
// push(currX, currY);
// for (; ;i++) {
// pop();
// map[currX][currY] = 0;
// if (map[N][M] == 0) {
// break;
// }
// if (map[currX+1][currY] == 1) {
// map[currX+1][currY] == 0;
// push(currX+1, currY);
// }
// if (map[currX][currY+1] == 1) {
// map[currX][currY+1] == 0;
// push(currX, currY+1);
// }
// if (map[currX-1][currY] == 1) {
// map[currX-1][currY] == 0;
// push(currX-1, currY);
// }
// if (map[currX][currY-1] == 1) {
// map[currX][currY-1] == 0;
// push(currX, currY-1);
// }
//
// currX = queue[0][rear];
// currY = queue[1][rear];
//
//
// }
// printf("%d", i);
//}
#include <stdio.h>
int map[100][100] = {};
int queue[2][1000] = {};
int rear = 0, front = 0;
void push(int x, int y)
{
queue[0][front] = x;
queue[1][front] = y;
front++;
}
void pop()
{
queue[0][rear] = 0;
queue[1][rear] = 0;
rear++;
}
int bfs(int x, int y)
{
map[x][y] = 0; //방문 했다고 표시
push(x, y); //큐에 push
for (int i = 0; ;i++) {
pop();
if (map[x+1][y] == 1) {
map[x+1][y] = 0;
push(x+1, y);
}
if (map[x][y+1] == 1) {
map[x][y+1] = 0;
push(x, y+1);
}
if (map[x-1][y] == 1) {
map[x-1][y] = 0;
push(x-1, y);
}
if (map[x][y-1] == 1) {
map[x][y-1] = 0;
push(x-1, y);
}
x = queue[0][rear];
y = queue[1][rear];
if (rear == front) {
return i;
}
}
}
int main()
{
int N = 0, M = 0;
scanf("%d %d", &N, &M);
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
scanf("%1d", &map[i][j]);
}
}
printf("%d", bfs(1, 1));
}

