#include <bits/stdc++.h>
using namespace std;
int n, top1, top2, a[1000000], sta1[1000000], sta2[1000000];
long long ans;
struct segment_tree {
  int a[4000000], b[4000000], lazy[4000000];
  void pushdown(int k) {
    int t = lazy[k];
    a[k << 1] += t;
    lazy[k << 1] += t;
    a[(k << 1) | 1] += t;
    lazy[(k << 1) | 1] += t;
    lazy[k] = 0;
  }
  void build(int l, int r, int k) {
    a[k] = l;
    b[k] = 1;
    if (l == r) return;
    int mid = (l + r) >> 1;
    build(l, mid, k << 1);
    build(mid + 1, r, (k << 1) | 1);
  }
  void update(int l, int r, int k, int x, int y, int z) {
    if (l >= x && r <= y) {
      a[k] += z;
      lazy[k] += z;
      return;
    }
    pushdown(k);
    int mid = (l + r) >> 1;
    if (x <= mid) update(l, mid, k << 1, x, y, z);
    if (y > mid) update(mid + 1, r, (k << 1) | 1, x, y, z);
    a[k] = min(a[k << 1], a[(k << 1) | 1]);
    b[k] = 0;
    if (a[k] == a[k << 1]) b[k] += b[k << 1];
    if (a[k] == a[(k << 1) | 1]) b[k] += b[(k << 1) | 1];
  }
  int find(int l, int r, int k, int x, int y) {
    if (l >= x && r <= y) return (a[k]) ? 0 : b[k];
    pushdown(k);
    int mid = (l + r) >> 1, ans = 0;
    if (x <= mid) ans += find(l, mid, k << 1, x, y);
    if (y > mid) ans += find(mid + 1, r, (k << 1) | 1, x, y);
    return ans;
  }
} st;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    a[x] = y;
  }
  st.build(1, n, 1);
  for (int i = 1; i <= n; i++) {
    st.update(1, n, 1, 1, n, -1);
    while (top1 && a[sta1[top1]] < a[i])
      st.update(1, n, 1, sta1[top1 - 1] + 1, sta1[top1], a[i] - a[sta1[top1]]),
          --top1;
    while (top2 && a[sta2[top2]] > a[i])
      st.update(1, n, 1, sta2[top2 - 1] + 1, sta2[top2], a[sta2[top2]] - a[i]),
          --top2;
    sta1[++top1] = sta2[++top2] = i;
    ans += st.find(1, n, 1, 1, i);
  }
  printf("%lld", ans);
}
