import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
static int n,m,cc,dd;
static int[][] ans=new int[1003][1003],bns=new int[1003][1003];
static int[] dx={1,1,1,0,0,-1,-1,-1},dy={-1,0,1,1,-1,-1,0,1};
static Queue<int[]> q=new LinkedList<int[]>();
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
n = sc.nextInt();
m = sc.nextInt();
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
ans[i][j] = sc.nextInt();
}
}
dfsa(1,1);
dfsb(1,1);
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
if(bns[i][j]==0){
dd++;
bns[i][j]=1;
q.add(new int[]{i,j});
bfs();
}
}
}
System.out.println(cc+dd);
}
static void bfs(){
while (!q.isEmpty()){
int[] a=q.poll();
int xx,yy;
for (int i=0;i<8;i++){
xx=a[0]+dx[i];
yy=a[1]+dy[i];
if(xx>0&&yy>0&&xx<=n&&yy<=m&&bns[xx][yy]==0){
bns[xx][yy]=1;
q.add(new int[]{xx,yy});
}
}
}
}
static void dfsb(int i,int j){
if(j==m+1){
dfsb(i+1,1);
return;
}
if(i==n+1){
return;
}
int xx,yy;
boolean flag=false;
if(bns[i][j]==2){
for(int k=0;k<8;k++) {
xx = i + dx[k];
yy = j + dy[k];
if(xx>0&&yy>0&&xx<=n&&yy<=m&&bns[xx][yy]==0){
flag=true;
break;
}
}
if(!flag){
cc++;
}
dfsb(i,j+1);
}else{
dfsb(i,j+1);
}
}
static void dfsa(int i,int j){
if(j==m+1){
dfsa(i+1,1);
return;
}
if(i==n+1){
return;
}
int xx,yy;
boolean flag=false;
if(ans[i][j]==0){
for(int k=0;k<8;k++) {
xx = i + dx[k];
yy = j + dy[k];
if(xx>0&&yy>0&&xx<=n&&yy<=m&&ans[xx][yy]==1){
flag=true;
break;
}
}
if(flag){
bns[i][j]=2;
}else {
bns[i][j]=0;
}
dfsa(i,j+1);
}else {
bns[i][j]=1;
dfsa(i,j+1);
}
}
}