/*
#include<stdio.h>
char map[11][11]={};
void dfs(int a, int b)
{
if(a<0||b<0||a>9||b>9||map[a][b]=='*') return;
map[a][b]='*';
dfs(a+1,b);
dfs(a-1,b);
dfs(a,b+1);
dfs(a,b-1);
}
int main()
{
int i,j,x,y;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
scanf("%c ",&map[i][j]);
}
}
scanf("%d %d",&x,&y);
dfs(y,x);
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
printf("%c",map[i][j]);
}
printf("\n");
}
}
*/
/*
#include<stdio.h>
typedef struct
{
int x,y;
}point;
int map[10][10]={};
point queue[100]={};
int f=-1,r=-1;
void enq(int x, int y)
{
if(x<1||y<1||x>9||y>9||map[x][y]==1) return;
r++
queue[r].x=x;
queue[r].y=y;
}
void bfs(int x, int y)
{
enq(x+1,y);
enq(x-1,y);
enq(x,y-1);
enq(x,y+1);
enq(x+1,y+1);
enq(x+1,y-1);
enq(x-1,y+1);
enq(x-1,y-1);
}
int main()
{
int i, j, r, c;
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
scanf("%d",&map[i][j]);
}
}
scanf("%d%d",&r,&c);
if(map[r][c]==0)
{
bfs(r,c);
}
}
#include<stdio.h>
int map[28][28]={};
int arr[100]={};
int n, cnt=0,t=0;
typedef struct
{
int x,y;
}point;
point queue[600];
int f=-1,r=-1;
void enq(int x, int y){
if(x<1 ||y<1 ||x>n ||y>n || map[x][y]!=1 ) return ;
point p;
p.x=x; p.y=y;
map[x][y]=-1;
queue[++r]=p;
}
void bfs(int x, int y){
enq(x,y+1);
enq(x,y-1);
enq(x+1,y);
enq(x-1,y);
}
int main()
{
int i,j,tmp,min;
point temp;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%1d",&map[i][j]);
}
}
bfs(1,1);
while(f!=r){
f++;
temp=queue[f];
bfs(temp.x,temp.y);
}
printf("%d\n",cnt);
}
*/
#include<stdio.h>
typedef struct
{
int x,y;
} point;;
point queue[1002001]= {};
int m, n, f=-1, r=-1;
int map[1001][1001]= {};
void enq(int x, int y)
{
if(x<1||y<1||x>n||y>m||map[x][y]!=0)
return;
r++;
map[x][y]=1;
queue[r].x=x;
queue[r].y=y;
}
void bfs(int x, int y)
{
enq(x,y-1);
enq(x,y+1);
enq(x+1,y);
enq(x-1,y);
}
int main()
{
int i, j, a, b, t, day=-1,cnt=0,s=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)
{
r++;
queue[r].x=i;
queue[r].y=j;
t=r;
}
}
}
if(r==m*n-1)
{
printf("0");
return 0;
}
while(f!=r)
{
f++;
bfs(queue[f].x,queue[f].y);
if(f==t)
{
t=r;
day++;
}
}
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
if(map[i][j]==0)
{
cnt++;
}
}
}
if(cnt==0)
{
printf("%d",day);
}
else
{
printf("-1");
}
return 0;
}



