Scanf.scanf "%d" (fun n ->
    let lr = Array.init n (fun i -> Scanf.scanf " %d %d" (fun l r -> l, r)) in

    let rec loop i bestl besti =
        if i = n then besti else
            let l, r = lr.(i) in
            if l > bestl then loop (i + 1) l i
                         else loop (i + 1) bestl besti
    in
    let p = loop 0 0 0 in
    let rec loop i bestr besti =
        if i = n then besti else
            let l, r = lr.(i) in
            if r < bestr then loop (i + 1) r i
                         else loop (i + 1) bestr besti
    in
    let q = loop 0 max_int 0 in
    let lp, rp = lr.(p) in
    let lq, rq = lr.(q) in

    let result = if p = q then (
        let rec loop j acc =
            if j = n then acc + rq - lp + 1 else
            if j = p then loop (j + 1) acc else
                let l1, r1 = lr.(j) in
                loop (j + 1) (max acc (r1 - l1 + 1))
        in
        loop 0 0
    ) else (
        let work = Array.make (n - 2) (0, 0) in
        let rec loop i j =
            if i < n then (
                if i = p || i = q then loop (i + 1) j else
                let l, r = lr.(i) in
                let () = work.(j) <- max (r - lp + 1) 0, max (rq - l + 1) 0 in
                loop (i + 1) (j + 1)
            )
        in
        loop 0 0;
        Array.sort (fun (a0, b0) (a1, b1) -> compare (a0, -b0) (a1, -b1)) work;
        let s = Array.make (n - 1) 0 in
        let t = Array.make (n - 1) 0 in
        t.(0)     <- rq - lq + 1;
        s.(n - 2) <- rp - lp + 1;
        for i = 1 to n - 2 do
            let _, b = work.(i - 1) in
            t.(i) <- min t.(i - 1) b;
        done;
        for i = n - 3 downto 0 do
            let a, _ = work.(i) in
            s.(i) <- min s.(i + 1) a;
        done;

        let rec loop i acc =
            if i = n - 1 then acc else loop (i + 1) (max acc (s.(i) + t.(i)))
        in
        loop 0 0
    )
    in
    Printf.printf "%d\n" result
)