#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e5 + 10;
int N, ar[MAXN], min_q[MAXN], max_q[MAXN];
int mn[MAXN << 2], cnt[MAXN << 2], lazy[MAXN << 2];
void init(int k, int b, int e) {
  cnt[k] = e - b + 1;
  if (b != e) {
    int m = (b + e) >> 1;
    init(2 * k, b, m);
    init(2 * k + 1, m + 1, e);
  }
}
void update(int k, int b, int e, int x, int y, int t) {
  if (b > y or e < x) return;
  if (b >= x and e <= y) {
    lazy[k] += t;
    return;
  }
  if (lazy[k]) {
    lazy[2 * k] += lazy[k];
    lazy[2 * k + 1] += lazy[k];
    lazy[k] = 0;
  }
  int m = (b + e) >> 1;
  update(2 * k, b, m, x, y, t);
  update(2 * k + 1, m + 1, e, x, y, t);
  mn[k] = min(mn[2 * k] + lazy[2 * k], mn[2 * k + 1] + lazy[2 * k + 1]);
  cnt[k] = 0;
  if (mn[k] == mn[2 * k] + lazy[2 * k]) cnt[k] += cnt[2 * k];
  if (mn[k] == mn[2 * k + 1] + lazy[2 * k + 1]) cnt[k] += cnt[2 * k + 1];
}
int main() {
  scanf("%d", &N);
  for (int i = 1, x, y; i <= N; i++) {
    scanf("%d%d", &x, &y);
    ar[x] = y;
  }
  init(1, 1, N);
  long long ans = 0;
  int min_push = 0, max_push = 0;
  for (int i = 1; i <= N; i++) {
    while (min_push >= 1 and ar[i] < ar[min_q[min_push]]) {
      update(1, 1, N, min_q[min_push - 1] + 1, min_q[min_push],
             ar[min_q[min_push]]);
      min_push--;
    }
    min_q[++min_push] = i;
    update(1, 1, N, min_q[min_push - 1] + 1, min_q[min_push],
           -ar[min_q[min_push]]);
    while (max_push >= 1 and ar[i] > ar[max_q[max_push]]) {
      update(1, 1, N, max_q[max_push - 1] + 1, max_q[max_push],
             -ar[max_q[max_push]] - 1);
      max_push--;
    }
    max_q[++max_push] = i;
    update(1, 1, N, max_q[max_push - 1] + 1, max_q[max_push],
           ar[max_q[max_push]] + 1);
    update(1, 1, N, 1, i, -1);
    ans -= N - i;
    if (mn[1] + lazy[1] == 0) ans += cnt[1];
  }
  printf("%lld\n", ans);
  return 0;
}
