#include<stdio.h>
int arr[1001][1001] = {};
int memo[1001][1001] = {};
int dir[2][4] = {{-1, 0}, {0, +1}, {+1, 0}, {0, -1}}, n, m;
void dfs(int i, int j, int k)
{
int q = abs(arr[i][j] - k);
if (i < 1 || i > n || j < 1 || j > n || q > 1 || memo[i][j] == 1) return ;
memo[i][j] = 1;
dfs(i - 1, j, arr[i][j]);
dfs(i, j + 1, arr[i][j]);
dfs(i + 1, j, arr[i][j]);
dfs(i, j - 1, arr[i][j]);
}
int main()
{
int i,j,k, cnt=0;
scanf("%d %d", &n, &m);
for (i = 1 ; i <= n ; i ++)
{
for (j = 1 ; j <= m ; j ++)
{
scanf("%d", &arr[i][j]);
}
}
dfs(1, 1, arr[1][1]);
for (i = 1 ; i <= n ; i ++)
{
for (j = 1 ; j <= m ; j ++)
{
if (memo[i][j] == 1) cnt ++;
}
}
printf("%d", cnt);
return 0;
}