#include #define N 508 using namespace std; int sol, n, m, i,j, up[N][N], down[N][N], left1[N][N], x, y, xx, yy, l, ll, k, mx, poz; string s[N]; int main() { cin.sync_with_stdio(0); cout.sync_with_stdio(0); cin >> n >> m; for(i = 0; i < n; i++) { cin >> s[i]; } for(i = 0; i < n; i++) for(j = 0; j < m; j++) if(s[i][j] == '1') { if(j)left1[i][j] = left1[i][j - 1]; left1[i][j]++; if(i) up[i][j] = up[i - 1][j]; up[i][j]++; } for(i = n - 1; i + 1; i--) for(j = 0; j < m; j++) if(s[i][j] == '1') { if(i < n - 1)down[i][j] = down[i + 1][j]; down[i][j]++; } for(i = 0; i < n; i++) { mx = 0; poz = 0; for(j = m - 1; j + 1; j--) if(s[i][j] == '1') { if(mx) if(up[i][j] > 1)sol = max(sol, poz - j - 1 + up[i][j] + up[i][poz]); if(mx) mx++; if(up[i][j] > 1) { if(mx < up[i][j]) { mx = up[i][j]; poz = j; } } } else mx = 0; } cout << sol; return 0; }