/* 
   AOJ 1160
   How Many Islands?
   2015.4.28
 */

#include<stdio.h>

int width, height, map[50][50], direction[8][2] = { {0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}};

void dfs(int x, int y)
{
  int i, j, prov_x = 0, prov_y = 0;

  /* printf("\n"); */

  /* for(i = 0; i < height; i++) */
  /*   { */
  /*     for(j = 0; j < width; j++) */
  /* 	{ */
  /* 	  printf("%d ", map[i][j]); */
  /* 	} */
  /*     printf("\n"); */
  /*   } */


  map[y][x] = 0;
  for(i = 0; i < 8; i++)
    {
      prov_x = x + direction[i][0];
      prov_y = y + direction[i][1];

      if(prov_x >= 0 && prov_x < width && prov_y >= 0 && prov_y < height && map[prov_y][prov_x] != 0)
	{
	  dfs(prov_x, prov_y);
	}
    }
}

int search_island()
{
  int i, j, count = 0;
  for(i = 0; i < height; i++)
    {
      for(j = 0; j < width; j++)
	{
	  if(map[i][j] == 1)
	    {
	      dfs(j, i);
	      count++;
	    }
	}
    }
  return count;
}

int main(void)
{
  int  i, j, island = 0;
  while(1)
    {
      scanf("%d %d", &width, &height);
      if(width == 0 && height == 0)
	{
	  break;
	}

      for(i = 0; i < 50; i++)
	{
	  for(j = 0; j < 50; j++)
	    {
	      map[i][j] = 0;
	    }
	}

      
      for(i = 0; i < height; i++)
	{
	  for(j = 0; j < width; j++)
	    {
	      scanf("%d", &map[i][j]);
	    }
	}

      /* printf("\n"); */
     
      /* for(i = 0; i < height; i++) */
      /* 	{ */
      /* 	  for(j = 0; j < width; j++) */
      /* 	    { */
      /* 	      printf("%d ", map[i][j]); */
      /* 	    } */
      /* 	  printf("\n"); */
      /* 	} */

      island = search_island();
      printf("%d\n", island);
      
    }
  return 0;
}