#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int INF = 1001001001;

int main(){
  ll n;
  cin >> n;
  ll maxl = 0,minr = 10e9,distmax = 0,case1 = 0,case2 = 0;
  vector<pair<ll,ll>> lr;
  for(int i=0;i<n;i++){
    ll l; cin >> l;
    ll r; cin >> r;
    maxl = max(l,maxl);
    minr = min(r,minr);
    lr.push_back(make_pair(l,r));
    distmax = max(distmax,r-l);
  }

  //右端が一番左側にあるpairと左端が一番右がわにあるpairを同じ集合に含む
  case1 = max(minr - maxl + 1 + distmax + 1,distmax+1);

  //別々の集合に含まれる
  {
    for(int i=0;i<n;i++){
      lr.at(i).first = max(minr-lr.at(i).first + 1,0ll);
      lr.at(i).second = max(lr.at(i).second-maxl + 1,0ll);
    }
    sort(lr.begin(),lr.end(),[](const pair<ll,ll> a, const pair<ll,ll> b) {
      if(a.first != b.first) return a.first < b.first;
      else return a.second > b.second;
    });
    ll mina = INF,minb = INF;
    for(int i=0;i<n-1;i++){
      mina = lr.at(i+1).first;
      minb = min(minb,lr.at(i).second);
      case2 = max(case2,mina + minb);
    }
  }
  cout << max(case1,case2) << endl;
}