#include <iostream>


using namespace std;


void setcount(int box[1002][1002], int i, int j)

{

if(box[i][j]==0)

return;

if(box[i][j]==-1)

return;


int c=0;


if(box[i-1][j]<box[i][j]-1&&box[i-1][j]!=-1)

{

c++;

box[i][j]=box[i-1][j]+1;

}

if(box[i+1][j]<box[i][j]-1&&box[i+1][j]!=-1)

{

c++;

box[i][j]=box[i+1][j]+1;

}

if(box[i][j-1]<box[i][j]-1&&box[i][j-1]!=-1)

{

c++;

box[i][j]=box[i][j-1]+1;

}

if(box[i][j+1]<box[i][j]-1&&box[i][j+1]!=-1)

{

c++;

box[i][j]=box[i][j+1]+1;

}


if(c==0)

return;


setcount(box,i-1,j);

setcount(box,i+1,j);

setcount(box,i,j-1);

setcount(box,i,j+1);

}


int main()

{

int m, n;

int max=0;


cin>>m>>n;

int box[1002][1002]={1000000};


for(int i=0;i<1002;i++)

{

for(int j=0;j<1002;j++)

{

if(i==0||i>n||j==0||j>m)

box[i][j]=-1;

}

}


int s;


for(int i=1;i<=n;i++)

{

for(int j=1;j<=m;j++)

{

cin>>s;

if(s==1)

box[i][j]=0;

if(s==0)

box[i][j]=1000000;

if(s==-1)

box[i][j]=-1;

}

}


for(int i=1;i<=n;i++)

{

for(int j=1;j<=m;j++)

{

if(box[i][j]==0)

{

setcount(box,i-1,j);

setcount(box,i+1,j);

setcount(box,i,j-1);

setcount(box,i,j+1);

}

}

}


int t;


for(int i=1;i<=n;i++)

{

for(int j=1;j<=m;j++)

{

if(box[i][j]!=-1)

{

t=box[i][j];

max=(t>max)?t:max;

}

}

}



if(max==1000000)

cout<<-1;

else

cout<<max;


return 0;

}


int 1002*1002칸 메모리 문제는 아닌거같아

제출할때 그냥 int arr[1002][1002]={0}; 해서 내면 엑셉트는 되는데 틀렸다그러거든

이코드는 아예 segmetation fault로 채점도 안돌아감..

어디가 문제야 ㅠㅠ 제발.. 제발 플리즈