#include <iostream>
#include <fstream>
#include <string.h>
#include <algorithm>
#include <fstream>
#include <bitset>
#include <map>
#include <vector>
#include <queue>
#include <deque>
#include <utility>
#include <string>
#include <iomanip>
#include <cstring>
#include <cmath>

#define vint vector<int>::iterator
#define vintp vector<pair<int,int> >::iterator
#define ll long long
#define inf 1000000
#define maxn 251
#define mod 329885391853LL

using namespace std;

ifstream fin ("A.in");
ofstream fout("A.out");

char s[1001][1001];
vector<int> G[300001];
vector<int> CB[300001];
int vis[300001],stack[300001],lvl[300001],nrb,t,n,nn,m,wh[501][501];
int counted[300001];

int dfs (int x)
{
    vis[x]=1;
    stack[++t] = x;
    int lowlink=inf,child_lowlink;
    lvl[x]=t;

    for (vector <int>::iterator it=G[x].begin();it!=G[x].end(); ++it)
    {
        if (!vis[*it])
        {
            child_lowlink=inf;
            child_lowlink = min (child_lowlink,dfs(*it));
            if (child_lowlink >= lvl[x])
            {
                ++nrb;
                 for (; stack[t]!=*it; --t)
                 {
                     CB[nrb].push_back (stack[t]);
                 }
                 CB[nrb].push_back(stack[t]);
                 --t;
                 CB[nrb].push_back(x);
            }
            lowlink = min (lowlink,child_lowlink);
        }
        else
        {
            lowlink = min (lowlink,lvl[*it]);
        }
    }
    return lowlink;

}

int main()
{
    cin>>nn>>m;

    for (int i=1; i<=nn; ++i)
        cin>>s[i]+1;

    for (int i=1; i<=nn; ++i)
        for (int j=1; j<=m; ++j)
    {
        if (s[i][j] == '1')
        {
            wh[i][j] = ++n;
        }
    }

    for (int i=1; i<=nn; ++i)
        for (int j=1; j<=m; ++j)
    {
        if (s[i][j] == '1')
        {
            if (i != nn && s[i+1][j] == '1')
            {
                G[wh[i][j]].push_back (wh[i+1][j]);
                G[wh[i+1][j]].push_back (wh[i][j]);
            }

            if (j != m && s[i][j+1] == '1')
            {
                G[wh[i][j]].push_back (wh[i][j+1]);
                G[wh[i][j+1]].push_back (wh[i][j]);
            }
        }
    }

    for (int i=1; i<=n; ++i)
    {
        if (!vis[i])
            dfs (i);
    }

    int s=0;

    for (int i=1; i<=nrb; ++i)
    {
        if (CB[i].size() >= 4)
        {
            for (vint it = CB[i].begin(); it != CB[i].end(); ++it)
            if (!counted[*it])
            {
                ++s;
                counted[*it] = 1;
            }
        }
    }

    cout<<s;
}