#include #define pb push_back #define mp make_pair #define mt make_tuple #define pii pair #define tii tuple #define N 550 #define mod 1000000005 #define X first #define Y second #define eps 0.0000000001 #define all(x) x.begin(),x.end() #define tot(x) x+1,x+n+1 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; 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++) for(j = 0; j < m; j++) if(s[i][j] == '1' && up[i][j] > 1) { for(k = j + 1; s[i][k] == '1'; k++) if(up[i][k] > 1)sol = max(sol, up[i][j] + k - j + up[i][k] - 1); } cout << sol; return 0; }