#include <iostream>
#include <vector>
using namespace std;
int m,n;
vector<vector<int>>res={{0,1},{0,-1},{1,0},{-1,0}};
void fill_water(vector<vector<int>>&memo,int i,int j){
      for(int k=0;k<4;++k){
        int x=i+res[k][0],y=j+res[k][1];
        if(x>=0&&x<m&&y>=0&&y<n&&memo[x][y]==0){
            memo[x][y]=2;
            fill_water(memo, x, y);
        }
      }
   }
   void fill_land(vector<vector<int>>&memo,int i,int j){
    for(int k=0;k<4;++k){
        int x=i+res[k][0],y=j+res[k][1];
        if(x>=0&&x<m&&y>=0&&y<n&&(memo[x][y]==0||memo[x][y]==1)){
            memo[x][y]=3;
            fill_land(memo, x,y);
        }
    }
   }
int main() {
    cin>>m>>n;
    vector<vector<int>>memo(m,vector<int>(n));
    for(int i=0;i<m;++i){
        for(int j=0;j<n;++j){
            cin>>memo[i][j];
        }
    }
    // 先填满水域
    for(int j=0;j<n;++j){
        if(memo[0][j]==0){
        memo[0][j]=2;
        fill_water(memo,0,j);
        }
    }
    for(int i=1;i<m;++i){
        if(memo[i][0]==0){
            memo[i][0]=2;
            fill_water(memo,i,0);
        }
        if(memo[i][n-1]==0){
            memo[i][n-1]=2;
            fill_water(memo,i,n-1);
        }
    }
    // 再填满有效陆域
    for(int j=0;j<n;++j){
        if(memo[m-1][j]==1){
            memo[m-1][j]=3;
            fill_land(memo,m-1,j);
        }
    }
    int sum=0;
    for(int i=0;i<m;++i){
        for(int j=0;j<n;++j){
            if(memo[i][j]==3){
                sum+=1;
            }
        }
        
    }
    cout<<sum<<endl;
}
// 64 位输出请用 printf("%lld")