#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define z false
#define mz true
int dirx[5]={0,0,0,-1,1};
int diry[5]={0,1,-1,0,0};
struct node
{
int x;
int y;
};
const int N=105;
ll n,m,ans=0;
bool vis[N][N];
bool b[N][N];
queue <node> q;
void bfs(int sx,int sy)
{
ans++;
node o;
o.x=sx;o.y=sy;
q.push(o);
b[sx][sy]=z;
while(!q.empty()){
int qx=q.front().x;
int qy=q.front().y;
for(int i=1;i<=4;i++){
int fx=qx+dirx[i],fy=qy+diry[i];
if(b[fx][fy]==mz && vis[fx][fy]){
node o;
o.x=fx;o.y=fy;
q.push(o);
b[fx][fy]=z;
}
}
q.pop();
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char c;
cin>>c;
vis[i][j]=bool(c!='0');
}
}
memset(b,mz,sizeof(b));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if( b[i][j]==mz ){
bfs(i,j);
}
}
}
cout<<ans<<endl;
return 0;
}