#include #include #include using namespace std; int n, m, i, j, d1[502][502], d2[502][502], d3[502][502], sol; char x[502][502]; int true2[502][502], true3[502][502]; //ifstream in("p2.in"); //ofstream out("p2.out"); int main() { cin>>n>>m; for(i=1; i<=n; i++) { for(j=1; j<=m; j++) { cin>>x[i][j]; } } for(j=1; j<=m; j++) { for(i=2; i<=n; i++) { if(x[i-1][j]=='1' && x[i][j]=='1') { if(d1[i-1][j]==0) d1[i][j]=max(d1[i][j], 2); else d1[i][j]=max(d1[i][j], d1[i-1][j]+1); } } } for(i=2; i<=n; i++) { for(j=2; j<=m; j++) { if(true2[i][j-1]==0 && x[i][j-1]=='1' && x[i-1][j-1]=='1' && x[i][j]=='1' && true2[i][j]==0) { d2[i][j]=max(d2[i][j], d1[i][j-1]+1); true2[i][j]=1; } else if(x[i][j-1]=='1' && x[i][j]=='1' && true2[i][j-1]) { d2[i][j]=max(d2[i][j], d2[i][j-1]+1); true2[i][j]=1; } } } for(j=m; j>=1; j--) { for(i=n-1; i>=1; i--) { if(true3[i+1][j]==0 && x[i+1][j]=='1' && x[i][j]=='1' && true2[i+1][j]) { d3[i][j]=max(d3[i][j], d2[i+1][j]+1); true3[i][j]=1; sol=max(sol, d3[i][j]); } else if(x[i+1][j]=='1' && x[i][j]=='1' && true3[i+1][j]) { d3[i][j]=max(d3[i][j], d3[i+1][j]+1); true3[i][j]=1; sol=max(sol, d3[i][j]); } } } cout<