#include <bits/stdc++.h>
using namespace std;
typedef struct data {
  int a, b;
} data;
bool compareByFirst(const data &a, const data &b) {
  if (a.a == b.a) return a.b > b.b;
  return a.a < b.a;
}
bool compareBySecond(const data &a, const data &b) {
  if (a.b == b.b) return a.a < b.a;
  return a.b > b.b;
}
int n, a, b;
data input[310000];
int main() {
  fscanf(stdin, "%d", &n);
  for (int i = 0; i < n; i++)
    fscanf(stdin, "%d", &input[i].a), fscanf(stdin, "%d", &input[i].b);
  sort(input, input + n, compareByFirst);
  int Min = 1000000000, Max = 0, ans = 0;
  for (int i = 0; i < n - 1; i++)
    Min = min(Min, input[i].b), Max = max(Max, input[i].a);
  ans = max(ans, Min - Max);
  sort(input, input + n, compareBySecond);
  Min = 1000000000, Max = 0;
  for (int i = 0; i < n - 1; i++)
    Min = min(Min, input[i].b), Max = max(Max, input[i].a);
  ans = max(ans, Min - Max);
  printf("%d\n", ans);
}
