#include<stdio.h>
#define MAX 50
int main()
{
  int x,y;
  int i,j;
  int data[MAX][MAX];
  int checkingx,checkingy;
  int checked[MAX][MAX];
  int able[MAX][MAX];
  int result;
  int flag;
  while(1)
    {
      for(i=0;i<MAX;i++)
	for(j=0;j<MAX;j++)
	  checked[j][i]=able[j][i]=0;
      
      scanf("%d %d",&x,&y);
      if((!x)&&(!y)) break;
      
      for(i=0;i<y;i++)
	for(j=0;j<x;j++)
	  scanf("%d",&data[j][i]);
      
      result=0;
      while(1)
	{
	  flag=0;
	  for(i=0;i<y;i++)
	    {
	      for(j=0;j<x;j++)
		{
		  if((checked[j][i]==0)&&(data[j][i]==1))
		    {
		      checkingx=j;
		      checkingy=i;
		      checked[j][i]=1;
		      result++;
		      flag=1;
		      //printf("NEW ISLAND from %d,%d\n",j,i);
		      break;
		    }
		}
	      if(flag) break;
	    }
	  if(!flag) break;
	  while(1)
	    {
	      if((checkingx>0)&&(data[checkingx-1][checkingy]==1))
		{
		  able[checkingx-1][checkingy]=1;
		  //printf("Island:%d,%d\n",checkingx-1,checkingy);
		}
	      if((checkingx<x-1)&&(data[checkingx+1][checkingy]==1))
		{
		  able[checkingx+1][checkingy]=1;
		  //printf("Island:%d,%d\n",checkingx+1,checkingy);
		}
	      if((checkingy>0)&&(data[checkingx][checkingy-1]==1))
		{
		  able[checkingx][checkingy-1]=1;
		  //printf("Island:%d,%d\n",checkingx,checkingy-1);
		}
	      if((checkingy<y-1)&&(data[checkingx][checkingy+1]==1))
		{
		  able[checkingx][checkingy+1]=1;
		  //printf("Island:%d,%d\n",checkingx-1,checkingy+1);
		}
	      
	      flag=0;
	      for(i=0;i<y;i++)
		{
		  for(j=0;j<x;j++)
		    {
		      if((checked[j][i]==0)&&(able[j][i]==1))
			{
			  checkingx=j;
			  checkingy=i;
			  checked[j][i]=1;
			  flag=1;
			  //printf("NEXT:  %d,%d\n",j,i);
			  break;
			}
		    }
		  if(flag) break;
		}
	      if(!flag) break;
	    }
	}
      printf("%d\n",result);
    }
  return 0;
}