//#include <stdio.h>
//int main(){
// int n, i;
// long long int top=0,sum=0;
// int cow[80000]={0}, stack[80000]={0};
// scanf("%d", &n);
// for(i=0; i<n; i++){
// scanf("%d", &cow[i]);
// }
// i=0;
// while(i<n){
//// printf("%d\n", top);
// stack[top]=cow[i];
//// printf("%d %d\n", top, stack[top]);
// while(top!=0&&stack[top-1]<=stack[top]){
// stack[top-1]=stack[top];
//
// top--;
//// printf("%d\n", top);
// sum=sum+top;
// }
// top++;
// i++;
// }
// sum=sum+(top-1)*top/2;
// printf("%lld", sum);
//}
//#include <stdio.h>
//int main(){
// int cnt=0, i,j,z,p=0, a=0, lap=0;
// int map[100][100]={0};
// scanf("%d %d", &x, &y);
// for(i=0; i<y; i++){
// for(j=0; j<x; j++){
// scanf("%d", &map[y][x]);
// }
// }
// while(1){
// if(map[i][j]==1){
// if(map[i+1][j]==0) map[i+1][j]=1; a++;
// if(map[i][j-1]==0) map[i][j-1]=1; a++;
// if(map[i-1][j]==0) map[i-1][j]=1; a++;
// if(map[i][j+1]==0) map[i][j+1]=1; a++;
// }
// lap++;
// if(lap==x*y){
// cnt++; lap=0;
// if(p==a) break;
// p=a;
// }
// }
// for(i=0; i<y; i++){
// for(j=0; j<x; j++){
// if(map[i][j]==0){
// z++;
// break;
// }
//
// }
// }
// if(z==1) printf("-1");
// else printf("%d", lap);
//}
#include <stdio.h>
int main(){
int map[100][100]={0};
int cr[2][100]={0};
int i, j, a=0, flag, front=0, rear, cnt=0,n,m;
int di[4][2]={{-1,0}, {1,0}, {0,-1}, {0,1}};
scanf("%d %d", &n, &m);
for(i=0; i<m; i++){
for(j=0; j<n; j++){
scanf("%d", &map[i][j]);
if(map[i][j]==1){
cr[1][a]=j;
cr[2][a]=i;
a++;
}
}
}
flag=a;
rear=a;
while(front!=rear){
for(i=0; i<4; i++){
if(map[cr[2][front]+di[i][1]][cr[1][front]+di[i][0]]==0){
cr[1][rear]=cr[1][front]+di[i][0];
cr[2][rear]=cr[2][front]+di[i][1];
map[cr[2][rear]][cr[1][rear]]=1;
rear++;
}
}
front++;
if(front==flag) cnt++;
flag=rear;
}
// for(i=0; i<rear; i++){
// printf("%d %d\n", cr[1][i], cr[2][i]);
// }
// printf("%d %d\n", rear, a);
//rear==2412??
printf("%d", cnt);
}
// if(map[i][j]==0){
// cr[1][rear]=cr[1][front];
// cr[2][rear]=cr[2][front]+1;
// rear++;