#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5;
struct Interval {
  int l, r;
} a[maxn + 5];
Interval _l[maxn + 5], _r[maxn + 5];
int dist(Interval a) {
  if (a.l > a.r) return 0;
  return a.r - a.l;
}
int main() {
  int n, i, ans;
  ans = -1;
  scanf("%d", &n);
  for (i = 0; i < n; i++) scanf("%d%d", &a[i].l, &a[i].r);
  _l[0].l = a[0].l;
  _l[0].r = a[0].r;
  for (i = 1; i < n; i++) {
    _l[i].l = max(_l[i - 1].l, a[i].l);
    _l[i].r = min(_l[i - 1].r, a[i].r);
  }
  _r[n - 1].l = a[n - 1].l;
  _r[n - 1].r = a[n - 1].r;
  for (i = n - 2; i >= 0; i--) {
    _r[i].l = max(_r[i + 1].l, a[i].l);
    _r[i].r = min(_r[i + 1].r, a[i].r);
  }
  if (dist(_r[1]) > ans) ans = dist(_r[1]);
  if (dist(_l[n - 2]) > ans) ans = dist(_l[n - 2]);
  for (i = 1; i < n - 1; i++) {
    Interval cur;
    cur.l = max(_l[i - 1].l, _r[i + 1].l);
    cur.r = min(_l[i - 1].r, _r[i + 1].r);
    if (dist(cur) > ans) ans = dist(cur);
  }
  printf("%d\n", ans);
  return 0;
}
