#include <iostream>
#include <cstring>
#define MS memset(yet, false, sizeof(yet))

using namespace std;

int h, w, a[110][110];
bool yet[110][110];
bool dfseven (int i, int j);

bool dfsodd (int i, int j)
{
    yet[i][j]=true;
    if (a[i][j]==1) return false;
    if (i==0 || i==h+1 || j==0 || j==w+1) return true;
    if (a[i][j]==0)
    {
        if (!yet[i-1][j]) { if (dfseven(i-1, j)) return true; }
        if (!yet[i-1][j+1]) { if (dfseven(i-1, j+1)) return true; }
        if (!yet[i][j-1]) { if (dfsodd(i, j-1)) return true; }
        if (!yet[i][j+1]) { if (dfsodd(i, j+1)) return true; }
        if (!yet[i+1][j]) { if (dfseven(i+1, j)) return true; }
        if (!yet[i+1][j+1]) { if (dfseven(i+1, j+1)) return true; }
    }
    return false;
}

bool dfseven (int i, int j)
{
    yet[i][j]=true;
    if (a[i][j]==1) return false;
    if (i==0 || i==h+1 || j==0 || j==w+1) return true;
    if (a[i][j]==0)
    {
        if (!yet[i-1][j-1]) { if (dfsodd(i-1, j-1)) return true; }
        if (!yet[i-1][j]) { if (dfsodd(i-1, j)) return true; }
        if (!yet[i][j-1]) { if (dfseven(i, j-1)) return true; }
        if (!yet[i][j+1]) { if (dfseven(i, j+1)) return true; }
        if (!yet[i+1][j-1]) { if (dfsodd(i+1, j-1)) return true; }
        if (!yet[i+1][j]) { if (dfsodd(i+1, j)) return true; }
    }
    return false;
}

int main()
{
    int cnt, sum=0;
    bool ok;
    memset(a, 0, sizeof(a));
    cin>>w>>h;
    for (int i=1; i<=h; i++) for (int j=1; j<=w; j++) cin>>a[i][j];
    for (int i=1; i<=h; i++)
    {
        for (int j=1; j<=w; j++)
        {
            ok=false;
            if (i%2==1 && a[i][j]==0)
            {
                if (dfseven(i-1, j)) { MS; ok=true; }
                else if (dfseven(i-1, j+1)) { MS; ok=true; }
                else if (dfsodd(i, j-1)) { MS; ok=true; }
                else if (dfsodd(i, j+1)) { MS; ok=true; }
                else if (dfseven(i+1, j)) { MS; ok=true; }
                else if (dfseven(i+1, j+1)) { MS; ok=true; }
            }
            if (i%2==0 && a[i][j]==0)
            {
                if (dfsodd(i-1, j-1)) { MS; ok=true; }
                else if (dfsodd(i-1, j)) { MS; ok=true; }
                else if (dfseven(i, j-1)) { MS; ok=true; }
                else if (dfseven(i, j+1)) { MS; ok=true; }
                else if (dfsodd(i+1, j-1)) { MS; ok=true; }
                else if (dfsodd(i+1, j)) { MS; ok=true; }
            }
            if (!ok && a[i][j]==0) a[i][j]=1;
        }
    }
    for (int i=1; i<=h; i++)
    {
        for (int j=1; j<=w; j++)
        {
            cnt=6;
            if (i%2==1 && a[i][j])
            {
                if (a[i-1][j]) cnt--;
                if (a[i-1][j+1]) cnt--;
                if (a[i][j-1]) cnt--;
                if (a[i][j+1]) cnt--;
                if (a[i+1][j]) cnt--;
                if (a[i+1][j+1]) cnt--;
                sum+=cnt;
            }
            if (i%2==0 && a[i][j])
            {
                if (a[i-1][j-1]) cnt--;
                if (a[i-1][j]) cnt--;
                if (a[i][j-1]) cnt--;
                if (a[i][j+1]) cnt--;
                if (a[i+1][j-1]) cnt--;
                if (a[i+1][j]) cnt--;
                sum+=cnt;
            }
        }
    }
    cout<<sum<<'\n';
    return 0;
}



Measured memory_bytes: 3484