#include<bits/stdc++.h>
using namespace std;
inline int read()//快读
{
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if(ch=='-'){t=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=x*10+ch-48;ch=getchar();}
return x*t;
}
int n,m,cnt=0;
int p[105][105];
bool flag[105][105];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
string a;
void dfs(int x,int y)
{
if(x<=0||y<=0||x>n||y>m) return ;//判断是否出边界
for(int i=0;i<4;i++)//枚举四个方向
{
int cx=x+dx[i];//更新坐标
int cy=y+dy[i];
if(p[cx][cy]&&!flag[cx][cy])//如果是数字且没有被标记就可以继续连成细胞
{
flag[cx][cy]=1;//做标记
dfs(cx,cy);//继续搜索,不需要回溯,因为标记过的点已经连入细胞中了
}
}
}
int main()
{
n=read();m=read();
for(int i=1;i<=n;i++)
{
cin>>a;//用字符串类型读入
for(int j=0;j<m;j++)
p[i][j+1]=a[j]-48;//转化成整型方便编写代码
}
for(int i=1;i<=n;i++)//枚举每一个点
for(int j=1;j<=m;j++)
if(!flag[i][j]&&p[i][j])//如果遇到了未被标记的数字点,就以此为起点搜索,表示找到了一个细胞
{
cnt++;//记录细胞数量
flag[i][j]=1;
dfs(i,j);
}
printf("%d",cnt);
return 0;
}