#include <bits/stdc++.h>
using namespace std;
struct preseg {
  long long l, r;
};
struct sufiseg {
  long long l, r;
};
bool operator<(const preseg &a, const preseg &b) {
  return (a.l < b.l ? true : (a.l == b.l ? (a.r > b.r) : false));
}
bool operator<(const sufiseg &a, const sufiseg &b) {
  return (a.r < b.r ? true : (a.r == b.r ? (a.l > b.l) : false));
}
int n;
multiset<preseg> preset;
multiset<sufiseg> sufiset;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long ans;
  preseg pret;
  sufiseg sufit;
  long long ml, mr;
  cin >> n;
  for (int i = (0); i != (n); ++i) {
    cin >> ml >> mr;
    pret.l = ml;
    pret.r = mr;
    sufit.l = ml;
    sufit.r = mr;
    preset.insert(pret);
    sufiset.insert(sufit);
  }
  auto preit = preset.rbegin(), prenxt = preit;
  prenxt++;
  auto sufiit = sufiset.begin(), sufinxt = sufiit;
  sufinxt++;
  if (preit->l == sufiit->l && preit->r == sufiit->r) {
    ans = sufinxt->r - prenxt->l;
    if (ans < 0) ans = 0;
  } else {
    ans = max(sufiit->r - prenxt->l, sufinxt->r - preit->l);
    if (ans < 0) ans = 0;
  }
  cout << ans << endl;
  return 0;
}
