#include using namespace std; int a[501][501],b[501][501],c[501][501],d[501][501],n,m,e[501][501],f[501][501],maxim; char c1; void citire () { cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>c1; if(c1=='1') d[i][j]=1; } } } void construct_a () { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(d[i][j]==1) a[i][j]=a[i-1][j]+1; if(d[i][j]==1) { if(e[i][j-1]==1 || a[i][j-1]>1) e[i][j]=1; } } } } void construct_b () { int h; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(e[i][j]==1) { h=a[i][j-1]; if(b[i][j-1]>h) h=b[i][j-1]; b[i][j]=h+1; } } } } void construct_c () { int h; for(int i=n;i>=1;i--) { for(int j=1;j<=m;j++) { if(d[i][j]==1) { if(e[i+1][j]==1) f[i][j]=1; if(f[i+1][j]==1) f[i][j]=1; } } } for(int i=n;i>=1;i--) { for(int j=1;j<=m;j++) { if(f[i][j]==1) { h=b[i+1][j]; if(c[i+1][j]>h) h=c[i+1][j]; c[i][j]=h+1; if(h>maxim) maxim=h; } } } } int main() { citire(); construct_a(); construct_b(); construct_c(); cout<