#include <bits/stdc++.h>
using namespace std;
int main() {
    int X, Y;
    cin >> Y >> X;
    int max=Y*X+1;//周りの壁
    int n = 0;
    int a[Y][X]; //高さのデータ(入力)
    int b[Y][X]; //低い部分から上がってくる個数のデータ(答えの元)
    int c[Y][X]; //幅優先探索用のデータ(重複潰し)
    int d[Y+2][X+2];
    for(int i = 0; i < Y; i++) {
        for(int j = 0; j < X; j++) {
            b[i][j] = 0;
            c[i][j] = 0;
        }
    }
    for(int i=0;i<Y+2;i++)
    {
        for(int j=0;j<X+2;j++)
        {
            d[i][j]=max;
        }
    }
    for(int i = 0; i < Y; i++) {
        for(int j = 0; j < X; j++) {
            cin >> a[i][j];
        }
    }
    for(int i=1;i<=Y;i++)
    {
        for(int j=1;j<=X;j++)
        {
            d[i][j]=a[i-1][j-1];
        }
    }
    vector<pair<int, int> > q;
    for(int i =1; i <= Y; i++){
        for(int j = 1; j <= X; j++) {
            if(d[i][j] < d[i + 1][j] && d[i][j] < d[i - 1][j] &&
               d[i][j] < d[i][j + 1] && d[i][j] < d[i][j - 1]) {
                q.push_back(make_pair(i-1, j-1));
                b[i-1][j-1]=1;
                n++;
            }
        }
    }
    for(int i = 0; i < n; i++) {
        queue<pair<int, int> > p;
        p.push(make_pair(q[i].first, q[i].second));
        c[p.front().first][p.front().second] = 1;
        while(p.empty() == false) {
            if(a[p.front().first][p.front().second]<a[p.front().first+1][p.front().second]&&c[p.front().first+1][p.front().second]==0&&p.front().first+1<Y)
            {
                p.push(make_pair(p.front().first+1,p.front().second));
                b[p.front().first+1][p.front().second]++;
                c[p.front().first+1][p.front().second] = 1;
            }
            if(a[p.front().first][p.front().second]<a[p.front().first-1][p.front().second]&&c[p.front().first-1][p.front().second]==0&&p.front().first-1>=0)
            {
                p.push(make_pair(p.front().first-1,p.front().second));
                b[p.front().first-1][p.front().second]++;
                c[p.front().first-1][p.front().second] = 1;
            }
            if(a[p.front().first][p.front().second]<a[p.front().first][p.front().second+1]&&c[p.front().first][p.front().second+1]==0&&p.front().second+1<X)
            {
                p.push(make_pair(p.front().first,p.front().second+1));
                b[p.front().first][p.front().second+1]++;
                c[p.front().first][p.front().second+1] = 1;
            }
            if(a[p.front().first][p.front().second]<a[p.front().first][p.front().second-1]&&c[p.front().first][p.front().second-1]==0&&p.front().second-1>=0)
            {
                p.push(make_pair(p.front().first,p.front().second-1));
                b[p.front().first][p.front().second-1]++;
                c[p.front().first][p.front().second-1] = 1;
            }
            p.pop();
        }
        for(int i = 0; i < Y; i++) {
            for(int j = 0; j < X; j++) {
                c[i][j] = 0;
            }
        }
    }
    int ans=0;
        for(int i=0;i<Y;i++)
        {
            for(int j=0;j<X;j++)
            {
                if(b[i][j]>=2)  ans++;
            }
        }
        cout<<ans<<endl;
    return 0;
}


Measured memory_bytes: 18776