#include <bits/stdc++.h>
using namespace std;
const int N=1005;
int n, m, a[N][N], ans;
bool vst[N][N];
int di[4]={-1, 0, 1, 0};
int dj[4]={0, 1, 0, -1};
bool inside(int i, int j) //hàm kiểm tra ô (i, j) có nằm trong ma trận hay không
{
return i>0 && i<=n && j>0 && j<=m;
}
void bfs(int u, int v)
{
queue<pair<int, int>> q;
q.push({u, v});
vst[u][v]=1;
while(!q.empty()){
int i=q.front().first, j=q.front().second;
q.pop();
for(int k=0;k<4;++k){
int ni=i+di[k], nj=j+dj[k];
if(inside(ni, nj) && !vst[ni][nj] && a[ni][nj]==1){
vst[ni][nj]=1;
q.push({ni, nj});
}
}
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin >> a[i][j];
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
if(!vst[i][j] && a[i][j]==1){
++ans;
bfs(i, j);
}
}
}
cout << ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTj0xMDA1OwppbnQgbiwgbSwgYVtOXVtOXSwgYW5zOwpib29sIHZzdFtOXVtOXTsKCmludCBkaVs0XT17LTEsIDAsIDEsIDB9OwppbnQgZGpbNF09ezAsIDEsIDAsIC0xfTsKCmJvb2wgaW5zaWRlKGludCBpLCBpbnQgaikgLy9ow6BtIGtp4buDbSB0cmEgw7QgKGksIGopIGPDsyBu4bqxbSB0cm9uZyBtYSB0cuG6rW4gaGF5IGtow7RuZwp7CiAgICByZXR1cm4gaT4wICYmIGk8PW4gJiYgaj4wICYmIGo8PW07Cn0KCnZvaWQgYmZzKGludCB1LCBpbnQgdikKewogICAgcXVldWU8cGFpcjxpbnQsIGludD4+IHE7CiAgICBxLnB1c2goe3UsIHZ9KTsKICAgIHZzdFt1XVt2XT0xOwogICAgd2hpbGUoIXEuZW1wdHkoKSl7CiAgICAgICAgaW50IGk9cS5mcm9udCgpLmZpcnN0LCBqPXEuZnJvbnQoKS5zZWNvbmQ7CiAgICAgICAgcS5wb3AoKTsKICAgICAgICBmb3IoaW50IGs9MDtrPDQ7KytrKXsKICAgICAgICAgICAgaW50IG5pPWkrZGlba10sIG5qPWorZGpba107CiAgICAgICAgICAgIGlmKGluc2lkZShuaSwgbmopICYmICF2c3RbbmldW25qXSAmJiBhW25pXVtual09PTEpewogICAgICAgICAgICAgICAgdnN0W25pXVtual09MTsKICAgICAgICAgICAgICAgIHEucHVzaCh7bmksIG5qfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnNpZ25lZCBtYWluKCkKewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBjaW4gPj4gbiA+PiBtOwogICAgZm9yKGludCBpPTE7aTw9bjsrK2kpewogICAgICAgIGZvcihpbnQgaj0xO2o8PW07KytqKXsKICAgICAgICAgICAgY2luID4+IGFbaV1bal07CiAgICAgICAgfQogICAgfQoKICAgIGZvcihpbnQgaT0xO2k8PW47KytpKXsKICAgICAgICBmb3IoaW50IGo9MTtqPD1tOysrail7CiAgICAgICAgICAgIGlmKCF2c3RbaV1bal0gJiYgYVtpXVtqXT09MSl7CiAgICAgICAgICAgICAgICArK2FuczsKICAgICAgICAgICAgICAgIGJmcyhpLCBqKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBjb3V0IDw8IGFuczsKICAgIHJldHVybiAwOwp9Cg==