#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int maxn=100;
struct node {
int x,y;
} Node;
int n,m;
int matrix[maxn][maxn];
bool inq[maxn][maxn]= {false};
int X[4]= {0,0,1,-1};
int Y[4]= {1,-1,0,0};
bool judge(int x,int y) {
if(x>=m||x<0||y>=n||y<0)return false;
if(matrix[x][y]==0||inq[x][y]==true)return false;
return true;
}
void BFS(int x,int y) {
queue<node>Q;
Node.x=x,Node.y=y;
Q.push(Node);
inq[x][y]=true;
while(!Q.empty()) {
node top=Q.front();
Q.pop();
for(int i=0; i<4; i++) {
int newx=top.x+X[i];
int newy=top.y+Y[i];
if(judge(newx,newy)) {
Node.x=newx;
Node.y=newy;
Q.push(Node);
inq[newx][newy]=true;
}
}
}
}
int main() {
scanf("%d %d",&m,&n);
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
scanf("%d",&matrix[i][j]);
}
}
int ans=0;
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if(matrix[i][j]==1&&inq[i][j]==false) {
ans++;
BFS(i,j);
}
}
}
printf("%d\n",ans);
7 6
0 1 1 1 0 0 1
0 0 1 0 0 0 0
0 0 0 0 1 0 0
0 0 0 1 1 1 0
1 1 1 0 1 0 0
1 1 1 1 0 0 0
return 0;
}