output_description: Print the maximum possible total joyfulness of the two contests.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      L_1 R_1
      L_2 R_2
      \vdots
      L_N R_N
attempt: import sys
  
  stdin = sys.stdin
  
  sys.setrecursionlimit(10**7)
  
  
  def li():
      return map(int, stdin.readline().split())
  
  
  def li_():
      return map(lambda x: int(x) - 1, stdin.readline().split())
  
  
  def lf():
      return map(float, stdin.readline().split())
  
  
  def ls():
      return stdin.readline().split()
  
  
  def ns():
      return stdin.readline().rstrip()
  
  
  def lc():
      return list(ns())
  
  
  def ni():
      return int(stdin.readline())
  
  
  def nf():
      return float(stdin.readline())
  
  
  from operator import itemgetter
  
  n = ni()
  lefts = []
  rights = []
  intervals = []
  for _ in range(n):
      l, r = li()
      r += 1
      lefts.append(l)
      rights.append(r)
      intervals.append((l, r))
  
  maxleft = max(lefts)
  minright = min(rights)
  ans = 0
  
  ## (1)最高の左端と最低の右端が同じ集合にあるとき
  # 1区間のみを選択
  longest = 0
  for l, r in intervals:
      if l == maxleft or r == minright:
          continue
      else:
          longest = max(longest, r - l)
  ans = longest + max(0, minright - maxleft)
  
  ## (2)最高の左端と最低の右端が別の集合にあるとき
  intervals = sorted(
      sorted(intervals, key=itemgetter(1), reverse=True), key=itemgetter(0)
  )
  
  s_maxleft = [intervals[0][0]]
  s_minright = [intervals[0][1]]
  t_maxleft = [intervals[-1][0]]
  t_minright = [intervals[-1][1]]
  
  for idx, (l, r) in enumerate(intervals):
      if idx == 0:
          continue
      s_maxleft.append(max(s_maxleft[-1], l))
      s_minright.append(min(s_minright[-1], r))
  
  for idx, (l, r) in enumerate(intervals[::-1]):
      if idx == 0:
          continue
      t_maxleft.append(max(s_maxleft[-1], l))
      t_minright.append(min(t_minright[-1], r))
  
  t_maxleft = t_maxleft[::-1]
  t_minright = t_minright[::-1]
  
  for i in range(n - 1):
      ans = max(
          ans,
          max(0, s_minright[i] - s_maxleft[i])
          + max(0, t_minright[i + 1] - t_maxleft[i + 1]),
      )
  
  print(ans)
  
problem_description: Statement
  
  10^9 contestants, numbered 1 to 10^9, will compete in a competition. There
  will be two contests in this competition.
  
  The organizer prepared N problems, numbered 1 to N, to use in these contests.
  When Problem i is presented in a contest, it will be solved by all contestants
  from Contestant L_i to Contestant R_i (inclusive), and will not be solved by
  any other contestants.
  
  The organizer will use these N problems in the two contests. Each problem must
  be used in exactly one of the contests, and each contest must have at least
  one problem.
  
  The _joyfulness_ of each contest is the number of contestants who will solve
  all the problems in the contest. Find the maximum possible total joyfulness of
  the two contests.
samples: [{"input": "4\n    4 7\n    1 4\n    5 8\n    2 5", "output": "6\n    \n\nThe optimal choice is:\n\n  * Use Problem 1 and 3 in the first contest. Contestant 5, 6, and 7 will solve both of them, so the joyfulness of this contest is 3.\n  * Use Problem 2 and 4 in the second contest. Contestant 2, 3, and 4 will solve both of them, so the joyfulness of this contest is 3.\n  * The total joyfulness of these two contests is 6. We cannot make the total joyfulness greater than 6.\n\n* * *"}, {"input": "4\n    1 20\n    2 19\n    3 18\n    4 17", "output": "34\n    \n\n* * *"}, {"input": "10\n    457835016 996058008\n    456475528 529149798\n    455108441 512701454\n    455817105 523506955\n    457368248 814532746\n    455073228 459494089\n    456651538 774276744\n    457667152 974637457\n    457293701 800549465\n    456580262 636471526", "output": "540049931"}]