#include <bits/stdc++.h>

using namespace std;

///---------------------------------------------------
const int BUFFER_SIZE = (1 << 16);
char buffer[BUFFER_SIZE];
int position = BUFFER_SIZE;

inline char getChar()
{
    if ( position == BUFFER_SIZE )
    {
        position = 0;
        fread(buffer, BUFFER_SIZE, 1, stdin);
    }

    return buffer[position++];
}

inline int getInt()
{
    register int a = 0;
    char ch;
    int sgn = 1;

    do
    {
        ch = getChar();

    } while ( !isdigit(ch) && ch != '-' );

    if ( ch == '-' )
    {
        sgn = -1;
        ch = getChar();
    }

    do
    {
        a = (a << 3) + (a << 1) + ch - '0';
        ch = getChar();

    } while ( isdigit(ch) );

    return a * sgn;
}
///---------------------------------------------------

const int MAX_N = 500 + 5;

char A[MAX_N][MAX_N];
int maxNumb[MAX_N][MAX_N];

int main()
{
    ///freopen("data.in", "r", stdin);

    int N, M;
    scanf("%d%d", &N, &M);

    for (int i = 1; i <= N; ++i)
    {
        static char s[MAX_N];
        scanf("%s", s);

        for (int j = 0; j < M; ++j)
            A[i][j + 1] = s[j] - '0';
    }

    for (int i = 1; i <= N; ++i)
        for (int j = 1; j <= M; ++j)
            if (A[i][j] == 0)
                maxNumb[i][j] = 0;
            else
                maxNumb[i][j] = 1 + maxNumb[i - 1][j];

    int best = 0;
    static pair<int,int> arr[MAX_N];
    int dim = 0;

    for (int i = N; i >= 1; --i)
    {
        int j = 1;

        while (j <= M)
        {
            if (A[i][j] == 0)
            {
                j++;
                continue;
            }

            int k = j;

            while (k <= M && A[i][k] == 1)
                k++;

            k--;

           // cout << "DA " << j << " " << k << " " << i << endl;
           dim = 0;

            for (int p = j; p <= k; ++p)
                arr[ dim++ ] = {maxNumb[i][p], p};

            sort(arr, arr + dim, [](const pair<int,int> &x, const pair<int,int> &y){return x.first > y.first;});

            for (int n = 0; n < dim; ++n)
                for (int m = n + 1; m < dim; ++m)
                {
                    //if (abs(k - j) - 1 + arr[n].first + arr[m].first < best)
                      //  break;

                    best = max(best, abs(arr[n].second - arr[m].second) - 1 + arr[n].first + arr[m].first);
                }


            j = k + 1;
        }
    }

    if (best < 4)
        best = 0;

    printf("%d\n", best);

    return 0;
}