#include <iostream>
using namespace std;
 
int main(void){
    while (1) {
        int Y, X;
        int c[55][55];
        cin >> X >> Y;
         
        //終了
        if (Y == 0 && X == 0) break;
         
        for (int i = 1; i <= Y; i++) {
            for (int j = 1; j <= X; j++) cin >> c[i][j];
        }
         
        //深さ別にリストを作成
        int vy[2555][155], vx[2555][155], pl[2555];
        for (int i = 0; i < 2000; i++) {
            pl[i] = 0;
            vy[i][0] = vx[i][0] = -1;
            for (int j = 1; j <= 553; j++) {
                vy[i][j] = vx[i][j] = 0;
            }
        }  
 
        //移動方向の指定
        int dy[8] = {1, 0, -1, 0, 1, 1, -1, -1};
        int dx[8] = {0, 1, 0, -1, 1, -1, 1, -1};
     
        //通過済みかどうか
        bool psd[55][55];
        
        for (int i = 0; i <= 53; i++) {
            for (int j = 0; j <= 53; j++) psd[i][j] = false;
        }
        
        for (int i = 1; i <= Y; i++) {
            for (int j = 1; j <= X; j++) {
                psd[i][j] = true;
                if (c[i][j] == 0) psd[i][j] = false;
            }
        }
         
        for (int i = 0; i <= Y + 1; i++) psd[i][0] = psd[i][X + 1] = false;
        for (int i = 0; i <= X + 1; i++) psd[0][i] = psd[Y + 1][i] = false;
         
        bool fns = false;
        int isl = 0;
        while (1) {
            for (int inf = 0; true; inf++) {
                bool spot = false;
                if (inf == 0) {
                    vy[0][0] = -1;
                    for (int i = 1; i <= Y; i++) {
                        for (int j = 1; j <= X; j++) {
                            if (psd[i][j] == true) {
                                vy[0][0] = i;
                                vx[0][0] = j;
                                isl++;
                                pl[0] = 1;
                                psd[i][j] = false;
                                spot = true;
                                break;
                            }
                        }
                        if (spot) break;
                    }
                    if (vy[0][0] == -1) {
                        fns = true;
                        break; //4, 全部の島の確認終了
                    }
                }
                else {
                    int pt = 0;
                    for (int i = 0; i < pl[inf - 1]; i++) {
                        for (int dir = 0; dir < 8; dir++) {
                            
                            if (vy[inf - 1][i] + dy[dir] != -1 && vy[inf - 1][i] + dy[dir] != Y + 2 && vx[inf - 1][i] + dx[dir] != -1 && vx[inf - 1][i] + dx[dir] != X + 2) {
                                if (psd[vy[inf - 1][i] + dy[dir]][vx[inf - 1][i] + dx[dir]] == true) {
                                    vy[inf][pt] = vy[inf - 1][i] + dy[dir];
                                    vx[inf][pt] = vx[inf - 1][i] + dx[dir];
                                    pl[inf]++;
                                    psd[vy[inf][pt]][vx[inf][pt]] = false;
                                    pt++;
                                }
                            }
                        }
                    }
                    if (pt == 0) break; //4, 1つの島の確認終了
                }
//                cout << "*" << inf << endl;
//                for (int i = 0; i < pl[inf]; i++) cout << vy[inf][i] << ", " << vx[inf][i] << endl;
            }
            if (fns) {
                cout << isl << endl;
                break; // 2, query終了
            }
        }
    }
}


Measured memory_bytes: 5564