#include <stdio.h>
#include <stdlib.h>
#define size 1000
int xQ[10000]= {};
int yQ[10000]= {};
int front=0,rear=0;
int map[100][100]= {};
int day=0;
int i,j,n,m,flag;
void dayupdate()
{
day++;
int re=rear;
//printf("day = %d\n",day);
for(int i=0; i<re-front+1; i++)
{
ripen(front,rear);
//mapview();
}
flag=1;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
if(map[i][j]==0)
{
flag=0;
}
}
}
if(flag==0)
{
dayupdate();
}
}
void mapview()
{
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
printf("%3d ", map[i][j]);
}
printf("\n");
}
printf("========================\n");
}
void ripen(int f, int r)
{
if(f>=r)
{
printf("-1");
return ;
}
front++;
if(xQ[f]-1>=1 && map[xQ[f]-1][yQ[f]]==0)
{
xQ[rear]=xQ[f]-1;
yQ[rear]=yQ[f];
map[xQ[f]-1][yQ[f]]=1;
rear++;
}
if(xQ[f]+1<=n && map[xQ[f]+1][yQ[f]]==0)
{
xQ[rear]=xQ[f]+1;
yQ[rear]=yQ[f];
map[xQ[f]+1][yQ[f]]=1;
rear++;
}
if(yQ[f]-1>=1 && map[xQ[f]][yQ[f]-1]==0)
{
xQ[rear]=xQ[f];
yQ[rear]=yQ[f]-1;
map[xQ[f]][yQ[f]-1]=1;
rear++;
}
if(yQ[f]+1<=m && map[xQ[f]][yQ[f]+1]==0)
{
xQ[rear]=xQ[f];
yQ[rear]=yQ[f]+1;
map[xQ[f]][yQ[f]+1]=1;
rear++;
}
}
int main()
{
int cnt=0;
scanf("%d %d",&m,&n);
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
scanf("%d", &map[i][j]);
if(map[i][j]==1)
{
cnt++;
xQ[rear]=i;
yQ[rear]=j;
rear++;
}
}
}
///////////////////////////////////////////
if(cnt==m*n)
{
printf("0");
return 0;
}
else
{
dayupdate();
printf("%d", day-1);
}
return 0;
}