//Code by Patcas Csaba #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LL long long #define PII pair #define VB vector #define VI vector #define VD vector #define VS vector #define VPII vector > #define VVI vector < VI > #define VVB vector < VB > #define FORN(i, n) for(int i = 0; i < (n); ++i) #define FOR(i, a, b) for(int i = (a); i <= (b); ++i) #define FORD(i, a, b) for(int i = (a); i >= (b); --i) #define REPEAT do{ #define UNTIL(x) }while(!(x)); #define SZ size() #define BG begin() #define EN end() #define CL clear() #define X first #define Y second #define RS resize #define PB push_back #define MP make_pair #define ALL(x) x.begin(), x.end() #define IN_FILE "a.in" #define OUT_FILE "a.out" int n, m; VVI a; VI dp; int main() { //Read data //freopen(IN_FILE, "r", stdin); //freopen(OUT_FILE, "w", stdout); cin >> n >> m; a.RS(n + 1, VI(m + 1)); string s; getline(cin, s); dp.RS(m + 1); int sol = 0; FOR(i, 1, n) { getline(cin, s); FOR(j, 1, m) { a[i][j] = s[j - 1] - '0'; if (a[i][j] == 0) dp[j] = 0; else ++dp[j]; } int l = 0; FOR(j, 1, m) { if (a[i][j] == 0) { l = 0; continue; } if (l == 0) if (dp[j] > 1) l = dp[j]; else continue; else { if (dp[j] > 1) { sol = max(sol, l + dp[j]); } l = max(l + 1, dp[j]); } } } //Solve //Write data cout << sol << endl; return 0; }