int H,W; int iso = 0; int A[3002][3002]; void dfs(int y, int x){ if (A[y][x] == 0) return; A[y][x] = 0; --iso; if ((y^x)&3 == 0) {dfs(y, x-1);dfs(y, x+1);dfs(y-1, x);dfs(y+1, x);} else if ((y^x)&3 == 1) {dfs(y, x+1);dfs(y, x-1);dfs(y+1, x);dfs(y-1, x);} else if ((y^x)&3 == 2) {dfs(y-1, x);dfs(y+1, x);dfs(y, x-1);dfs(y, x+1);} else {dfs(y+1, x);dfs(y-1, x);dfs(y, x+1);dfs(y, x-1);} } { rd(H,W); REP(y,1,H+1) REP(x,1,W+1) rd(A[y][x]), iso += A[y][x]; REP(y,1,H+1) REP(x,1,W+1) if (A[y][x] == 1){ ++iso; dfs(y,x); } wt(iso); }