#include <bits/stdc++.h>
using namespace std;
const int N = 300000, INF = (1 << 30) - 1;
int n, a[N + 9];
struct tree {
  int min, add, cnt;
} tr[N * 4 + 9];
void Pushup(int k) {
  int ls = k << 1, rs = k << 1 | 1;
  tr[k].min = min(tr[ls].min, tr[rs].min);
  tr[k].cnt = (tr[ls].min == tr[k].min ? tr[ls].cnt : 0) +
              (tr[rs].min == tr[k].min ? tr[rs].cnt : 0);
}
void Update_add(int k, int v) {
  tr[k].min += v;
  tr[k].add += v;
}
void Pushdown(int k) {
  if (!tr[k].add) return;
  Update_add(k << 1, tr[k].add);
  Update_add(k << 1 | 1, tr[k].add);
  tr[k].add = 0;
}
void Build(int L, int R, int k) {
  if (L == R) {
    tr[k].cnt = 1;
    return;
  }
  int mid = L + R >> 1;
  Build(L, mid, k << 1);
  Build(mid + 1, R, k << 1 | 1);
  Pushup(k);
}
void Change_add(int L, int R, int v, int l, int r, int k) {
  if (L > R) return;
  if (L == l && R == r) {
    Update_add(k, v);
    return;
  }
  Pushdown(k);
  int mid = l + r >> 1;
  if (R <= mid)
    Change_add(L, R, v, l, mid, k << 1);
  else if (L > mid)
    Change_add(L, R, v, mid + 1, r, k << 1 | 1);
  else
    Change_add(L, mid, v, l, mid, k << 1),
        Change_add(mid + 1, R, v, mid + 1, r, k << 1 | 1);
  Pushup(k);
}
int Query_cnt(int L, int R, int l, int r, int k) {
  if (L > R) return 0;
  if (L == l && R == r) return tr[k].min == 0 ? tr[k].cnt : 0;
  Pushdown(k);
  int mid = l + r >> 1;
  if (R <= mid)
    return Query_cnt(L, R, l, mid, k << 1);
  else if (L > mid)
    return Query_cnt(L, R, mid + 1, r, k << 1 | 1);
  else
    return Query_cnt(L, mid, l, mid, k << 1) +
           Query_cnt(mid + 1, R, mid + 1, r, k << 1 | 1);
}
struct state {
  int l, r, v;
  state(int L = 0, int R = 0, int V = 0) {
    l = L;
    r = R;
    v = V;
  }
};
stack<state> mn, mx;
long long ans;
inline void into() {
  scanf("%d", &n);
  int x;
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &x);
    scanf("%d", &a[x]);
  }
}
inline void work() {
  Build(1, n, 1);
  mx.push(state(0, 0, INF));
  mn.push(state(0, 0, -INF));
  for (int i = 1; i <= n; ++i) {
    Change_add(1, i - 1, -1, 1, n, 1);
    for (; mx.top().v <= a[i]; mx.pop()) {
      state t = mx.top();
      Change_add(t.l, t.r, a[i] - t.v, 1, n, 1);
    }
    mx.push(state(mx.top().r + 1, i, a[i]));
    for (; mn.top().v >= a[i]; mn.pop()) {
      state t = mn.top();
      Change_add(t.l, t.r, t.v - a[i], 1, n, 1);
    }
    mn.push(state(mn.top().r + 1, i, a[i]));
    ans += (long long)Query_cnt(1, i, 1, n, 1);
  }
}
inline void outo() { printf("%I64d\n", ans); }
int main() {
  into();
  work();
  outo();
  return 0;
}
