#include <iostream>
#include <memory.h>
#define MAX 51
using namespace std;
int map[MAX][MAX]; //맵정보
bool visited[MAX][MAX]; //방문정보
int answer; //섬의 갯수
int w, h;
// 탐색 방향 설정
int dir_x[8] = { -1, -1, -1, 0, 1, 1, 1, 0 };
int dir_y[8] = { -1, 0, 1, 1, 1, 0, -1, -1 };
void dfs(int i, int j) {
//기저 사례
// 1. 범위 밖으로 나가는 경우
if ((i == 0 || i == h + 1) || (j == 0 || j == w + 1)) return;
// 2. 이미 방문했을 경우나 바다인 경우
if (visited[i][j] == true || map[i][j] == 0) return;
//탐색
visited[i][j] = true;
for (int k = 0; k < 8; k++) {
int x = i + dir_x[k];
int y = j + dir_y[k];
dfs(x, y);
}
}
int main() {
while (1) {
answer = 0;
memset(map, -1, sizeof(map));
memset(visited, false, sizeof(visited));
cin >> w >> h;
if (w == 0 && h == 0) break;
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= w; j++) {
int inf;
cin >> inf;
map[i][j] = inf;
}
}
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= w; j++) {
//땅인데 방문 안했을 경우만 확인
if (visited[i][j] == false && map[i][j] == 1) {
dfs(i, j);
answer++;
}
else
continue;
}
}
cout << answer << endl;
}
return 0;
}