#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 300005;
int n, m;
pair<int, int> a[N];
struct Node {
  int v;
  ll n;
} f[2][N][3], g[2][N][3], ans;
inline void update(int v1, ll n1) {
  if (n1) {
    if (v1 > ans.v)
      ans = {v1, n1};
    else if (v1 == ans.v)
      ans.n += n1;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 1; i <= m; i++) cin >> a[i].second >> a[i].first;
  sort(a + 1, a + m + 1);
  f[0][0][1].v = f[1][0][1].v = g[0][m + 1][1].v = g[1][m + 1][1].v =
      INT_MAX / 2;
  for (int i = 1; i <= m; i++) {
    int t = a[i].second, x = a[i].first;
    memcpy(f[!t][i], f[!t][i - 1], sizeof(f[1][1]));
    if (x > f[t][i - 1][0].v)
      f[t][i][0] = {x, 1};
    else if (x == f[t][i - 1][0].v)
      f[t][i][0] = {x, f[t][i - 1][0].n + 1};
    else
      f[t][i][0] = f[t][i - 1][0];
    if (x < f[t][i - 1][1].v)
      f[t][i][1] = {x, 1};
    else if (x == f[t][i - 1][1].v)
      f[t][i][1] = {x, f[t][i - 1][1].n + 1};
    else
      f[t][i][1] = f[t][i - 1][1];
    f[t][i][2].n = f[t][i - 1][2].n + 1;
  }
  for (int i = m; i > 0; --i) {
    int t = a[i].second, x = a[i].first;
    memcpy(g[!t][i], g[!t][i + 1], sizeof(g[1][1]));
    if (x > g[t][i + 1][0].v)
      g[t][i][0] = {x, 1};
    else if (x == g[t][i + 1][0].v)
      g[t][i][0] = {x, g[t][i + 1][0].n + 1};
    else
      g[t][i][0] = g[t][i + 1][0];
    if (x < g[t][i + 1][1].v)
      g[t][i][1] = {x, 1};
    else if (x == g[t][i + 1][1].v)
      g[t][i][1] = {x, g[t][i + 1][1].n + 1};
    else
      g[t][i][1] = g[t][i + 1][0];
    g[t][i][2].n = g[t][i + 1][2].n + 1;
  }
  for (int i = 2; i <= m - 1; i++) {
    int t = a[i].second, x = a[i].first;
    update(2 * g[t][i + 1][0].v - 2 * f[t][i - 1][1].v,
           g[t][i + 1][0].n * f[t][i - 1][1].n);
    update(2 * n - 2 * x + 2 * f[!t][i - 1][0].v,
           f[!t][i - 1][0].n * g[t][i + 1][2].n);
    update(2 * n, f[!t][i - 1][2].n * g[!t][i + 1][2].n);
    update(2 * n - 2 * g[!t][i + 1][1].v + 2 * x,
           f[t][i - 1][2].n * g[!t][i + 1][1].n);
  }
  cout << ans.n << endl;
  return 0;
}
