#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n, m, i, j, d1[502][502], d2[502][502], d3[502][502], sol;
char x[502][502];
int true2[502][502], true3[502][502];
//ifstream in("p2.in");
//ofstream out("p2.out");
int main()
{
    cin>>n>>m;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            cin>>x[i][j];
        }
    }
    for(j=1; j<=m; j++)
    {
        for(i=2; i<=n; i++)
        {
            if(x[i-1][j]=='1' && x[i][j]=='1')
            {
                if(d1[i-1][j]==0)
                    d1[i][j]=max(d1[i][j], 2);
                else
                    d1[i][j]=max(d1[i][j], d1[i-1][j]+1);
            }
        }
    }
    for(i=2; i<=n; i++)
    {
        for(j=2; j<=m; j++)
        {
            if(true2[i][j-1]==0 && x[i][j-1]=='1' && x[i-1][j-1]=='1' && x[i][j]=='1' && true2[i][j]==0)
            {
                d2[i][j]=max(d2[i][j], d1[i][j-1]+1);
                true2[i][j]=1;
            }
            else
            if(x[i][j-1]=='1' && x[i][j]=='1' && true2[i][j-1])
            {
                d2[i][j]=max(d2[i][j], d2[i][j-1]+1);
                true2[i][j]=1;
            }
        }
    }
    for(j=m; j>=1; j--)
    {
        for(i=n-1; i>=1; i--)
        {






            if(true3[i+1][j]==0 && x[i+1][j]=='1' && x[i][j]=='1' && true2[i+1][j])
            {
                d3[i][j]=max(d3[i][j], d2[i+1][j]+1);
                true3[i][j]=1;
                sol=max(sol, d3[i][j]);
            }





            else
            if(x[i+1][j]=='1' && x[i][j]=='1' && true3[i+1][j])
            {
                d3[i][j]=max(d3[i][j], d3[i+1][j]+1);
                true3[i][j]=1;
                sol=max(sol, d3[i][j]);
            }
        }
    }
    cout<<sol;
}