RT
#include<bits/stdc++.h>
using namespace std;
int x,y,ans;
char a[510][510];
int s1[4]={0,0,1,-1},s2[4]={1,-1,0,0};
bool flag[510][510];
void dfs1(int m,int n){
flag[m][n]=1;
for(int i=0;i<4;i++)
if(m+s1[i]>=1&&n+s2[i]>=1&&m+s1[i]<=x&&n+s2[i]<=y&&a[m+s1[i]][n+s2[i]]=='0'&&flag[m+s1[i]][n+s2[i]]==0) dfs1(m+s1[i],n+s2[i]);
return ;
}
void dfs2(int m,int n){
flag[m][n]=1;
for(int i=0;i<4;i++)
if(m+s1[i]>=1&&n+s2[i]>=1&&m+s1[i]<=x&&n+s2[i]<=y&&a[m+s1[i]][n+s2[i]]=='0'&&flag[m+s1[i]][n+s2[i]]==0) dfs2(m+s1[i],n+s2[i]);
return ;
}
int main()
{
cin>>x>>y;
for(int i=1;i<=x;i++)
for(int j=1;j<=y;j++) cin>>a[i][j];
for(int i=1;i<=x;i++)
if(a[i][1]=='0'&&flag[i][1]==0) dfs1(i,1);
for(int i=1;i<=x;i++)
if(a[i][y]=='0'&&flag[i][y]==0) dfs1(i,y);
for(int j=1;j<=y;j++)
if(a[1][j]=='0'&&flag[1][j]==0) dfs1(1,j);
for(int j=1;j<=y;j++)
if(a[x][j]=='0'&&flag[x][j]==0) dfs1(x,j);
for(int i=1;i<=x;i++)
for(int j=1;j<=y;j++){
if(flag[i][j]==0&&a[i][j]=='0'){
dfs2(i,j);
ans++;
}
}
cout<<ans;
return 0;
}