#include <bits/stdc++.h>

using namespace std;

const int maxn=(int)1e3+5;
int ans,a[maxn][maxn],b[maxn],n,m;
string s[maxn];

bool check(int x,int y)
{
    if(a[x][y]==a[x+1][y]&&a[x][y]==a[x][y+1]&&a[x][y]==a[x+1][y+1]) return true;
    return false;
}

int f()
{
    int answer=0;
    for(int i=0;i<n-1;i++)
        for(int j=0;j<m-1;j++)
            if(check(i,j)) answer++;
    return answer;
}

void up()
{
    for(int i=0;i<m;i++)
        b[i]=a[0][i];
    for(int i=0;i<n-1;i++)
        for(int j=0;j<m;j++)
            a[i][j]=a[i+1][j];
    for(int i=0;i<m;i++)
        a[n-1][i]=b[i];
}

void down()
{
    for(int i=0;i<m;i++)
        b[i]=a[n-1][i];
    for(int i=n-1;i>0;i--)
        for(int j=0;j<m;j++)
            a[i][j]=a[i-1][j];
    for(int i=0;i<m;i++)
        a[0][i]=b[i];
}

void left()
{
    for(int i=0;i<n;i++)
        b[i]=a[i][0];
    for(int j=0;j<m-1;j++)
        for(int i=0;i<n;i++)
            a[i][j]=a[i][j+1];
    for(int i=0;i<n;i++)
        a[i][m-1]=b[i];
}

void right()
{
    for(int i=0;i<n;i++)
        b[i]=a[i][m-1];
    for(int j=m-1;j>0;j--)
        for(int i=0;i<n;i++)
            a[i][j]=a[i][j-1];
    for(int i=0;i<n;i++)
        a[i][0]=b[i];
}

void doit(int t,int l,int k,int d)
{
    if(t==1) up();
    if(l==1) left();
    if(k==1) down();
    if(d==1) right();
}

int main()
{
    freopen("video.in","r",stdin);
    freopen("video.out","w",stdout);
    cin >> n >> m;
    for(int i=0;i<n;i++)
        cin>> s[i];
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            a[i][j]=s[i][j]-'0';
    for(int t=0;t<2;t++)
        for(int l=0;l<2;l++)
            for(int k=0;k<2;k++)
                for(int d=0;d<2;d++)
                {
                    doit(t,l,k,d);
                    ans=max(ans,f());
                    doit((t+1)%2,(l+1)%2,(k+1)%2,(d+1)%2);
                }
    cout << ans;
    return 0;
}
