#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <map>
#include <set>

using namespace std;

int n , m , mat[1000][1000] , dp1[1000][1000] , dp2[1000][1000] , sol;

int main() {
    #ifndef ONLINE_JUDGE
        freopen("input.txt" , "r" , stdin);
    #endif // ONLINE_JUDGE

    cin >> n >> m;

    char ch;
    for(int i = 1 ; i <= n ; ++i) {
        for(int j = 1 ; j <= m ; ++j) {
            cin >> ch;
            mat[i][j] = ch - '0';
        }
    }

    for(int i = 1 ; i <= n ; ++i) {
        for(int j = 1 ; j <= m ; ++j) {
            if(mat[i][j] == 1) {
                dp1[i][j] = dp1[i - 1][j] + 1;
            }

            else {
                dp1[i][j] = 0;
            }
        }
    }

    for(int i = 1 ; i <= n ; ++i) {
        for(int j = 1 ; j <= m ; ++j) {
            if(mat[i][j] == 0)
                dp2[i][j] = 0;
            else  {
                if(mat[i][j - 1] == 0)
                    dp2[i][j] = 0;
                else {
                    if(dp1[i][j - 1] != 1)
                        dp2[i][j] = max(dp1[i][j - 1] + dp1[i][j] , dp2[i][j - 1] + dp1[i][j] - dp1[i][j - 1] + 1);
                    else
                        if(dp2[i][j - 1] != 0)
                            dp2[i][j] =  dp2[i][j - 1] + dp1[i][j] - dp1[i][j - 1] + 1;
                }
            }

            if(dp1[i][j] != 1)
                sol = max(sol , dp2[i][j]);
        }
    }

    cout << sol;
    return 0;
}