#include<stdio.h>
#include<stdbool.h>

void solve(int w,int h);

int main(void){
  int w,h;
  while(scanf("%d%d",&w,&h) && w && h){
    solve(w,h);
  }
  return 0;
}

void solve(int w,int h){
  unsigned short map[52][52];
  struct q{
    short ii,jj;
  }next[2500];
  int i,j,k,di,dj;
  int q_num,island;
  bool flg=true;

  for(i=0;i<52;i++) for(j=0;j<52;j++) map[i][j]=0;

  for(i=1;i<=h;i++) for(j=1;j<=w;j++) scanf("%hu",&map[i][j]);

  for(island=2;flg;island++){
    flg=false;
    for(i=1;i<=h && !flg ;i++)
      for(j=1;j<=w && !flg;j++) if(map[i][j]==1) flg=true;
    if(!flg) continue;

    next[0]=(struct q){i-1,j-1};
    map[i-1][j-1]=island;

    for(q_num=1,i=0;i<q_num;i++){
      for(di=-1;di<=1;di++){
	for(dj=-1;dj<=1;dj++){
	  if(map[next[i].ii+di][next[i].jj+dj]==1){
	    next[q_num++]=(struct q){next[i].ii+di,next[i].jj+dj};
	    map[next[i].ii+di][next[i].jj+dj]=island;
	  }
	}
      }
    }
  }
  printf("%d\n",island-3);
}