import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		//入力 A: Alice、B:Bob
		int A_min = sc.nextInt();
		int A_max = sc.nextInt();
		int B_min = sc.nextInt();
		int B_max = sc.nextInt();
		int answer = 0;

		//Aの最小値よりBの最大値が小さい、もしくは、Aの最大値よりBの最小値が大きい場合：区間の重複はないため答えは0
		if (A_min > B_max || A_max < B_min) {
			answer = 0;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が小さい場合：Aの最小値～Bの最大値まで重複
		else if (A_min >= B_min && A_max >= B_max) {
			answer = B_max - A_min;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が大きい場合：Aの最小値～Aの最大値まで重複
		else if (A_min >= B_min && A_max <= B_max) {
			answer = A_max - A_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が小さい場合：Bの最小値～Bの最大値まで重複
		else if (A_min <= B_min && A_max >= B_max) {
			answer = B_max - B_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が大きい場合：Bの最小値～Aの最大値まで重複
		else {
			answer = A_max - B_min;
		}
//		else if (A_min <= B_min && A_max >= B_max) {
//			answer = A_max - B_min;
//		}

		System.out.println(answer);
	}
} import java.util.Scanner; Scanner java.util public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		//入力 A: Alice、B:Bob
		int A_min = sc.nextInt();
		int A_max = sc.nextInt();
		int B_min = sc.nextInt();
		int B_max = sc.nextInt();
		int answer = 0;

		//Aの最小値よりBの最大値が小さい、もしくは、Aの最大値よりBの最小値が大きい場合：区間の重複はないため答えは0
		if (A_min > B_max || A_max < B_min) {
			answer = 0;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が小さい場合：Aの最小値～Bの最大値まで重複
		else if (A_min >= B_min && A_max >= B_max) {
			answer = B_max - A_min;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が大きい場合：Aの最小値～Aの最大値まで重複
		else if (A_min >= B_min && A_max <= B_max) {
			answer = A_max - A_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が小さい場合：Bの最小値～Bの最大値まで重複
		else if (A_min <= B_min && A_max >= B_max) {
			answer = B_max - B_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が大きい場合：Bの最小値～Aの最大値まで重複
		else {
			answer = A_max - B_min;
		}
//		else if (A_min <= B_min && A_max >= B_max) {
//			answer = A_max - B_min;
//		}

		System.out.println(answer);
	}
} Main public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		//入力 A: Alice、B:Bob
		int A_min = sc.nextInt();
		int A_max = sc.nextInt();
		int B_min = sc.nextInt();
		int B_max = sc.nextInt();
		int answer = 0;

		//Aの最小値よりBの最大値が小さい、もしくは、Aの最大値よりBの最小値が大きい場合：区間の重複はないため答えは0
		if (A_min > B_max || A_max < B_min) {
			answer = 0;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が小さい場合：Aの最小値～Bの最大値まで重複
		else if (A_min >= B_min && A_max >= B_max) {
			answer = B_max - A_min;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が大きい場合：Aの最小値～Aの最大値まで重複
		else if (A_min >= B_min && A_max <= B_max) {
			answer = A_max - A_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が小さい場合：Bの最小値～Bの最大値まで重複
		else if (A_min <= B_min && A_max >= B_max) {
			answer = B_max - B_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が大きい場合：Bの最小値～Aの最大値まで重複
		else {
			answer = A_max - B_min;
		}
//		else if (A_min <= B_min && A_max >= B_max) {
//			answer = A_max - B_min;
//		}

		System.out.println(answer);
	} main {

		Scanner sc = new Scanner(System.in);

		//入力 A: Alice、B:Bob
		int A_min = sc.nextInt();
		int A_max = sc.nextInt();
		int B_min = sc.nextInt();
		int B_max = sc.nextInt();
		int answer = 0;

		//Aの最小値よりBの最大値が小さい、もしくは、Aの最大値よりBの最小値が大きい場合：区間の重複はないため答えは0
		if (A_min > B_max || A_max < B_min) {
			answer = 0;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が小さい場合：Aの最小値～Bの最大値まで重複
		else if (A_min >= B_min && A_max >= B_max) {
			answer = B_max - A_min;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が大きい場合：Aの最小値～Aの最大値まで重複
		else if (A_min >= B_min && A_max <= B_max) {
			answer = A_max - A_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が小さい場合：Bの最小値～Bの最大値まで重複
		else if (A_min <= B_min && A_max >= B_max) {
			answer = B_max - B_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が大きい場合：Bの最小値～Aの最大値まで重複
		else {
			answer = A_max - B_min;
		}
//		else if (A_min <= B_min && A_max >= B_max) {
//			answer = A_max - B_min;
//		}

		System.out.println(answer);
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int A_min = sc.nextInt(); A_min sc.nextInt() sc.nextInt sc int A_max = sc.nextInt(); A_max sc.nextInt() sc.nextInt sc int B_min = sc.nextInt(); B_min sc.nextInt() sc.nextInt sc int B_max = sc.nextInt(); B_max sc.nextInt() sc.nextInt sc int answer = 0; answer 0 if (A_min > B_max || A_max < B_min) {
			answer = 0;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が小さい場合：Aの最小値～Bの最大値まで重複
		else if (A_min >= B_min && A_max >= B_max) {
			answer = B_max - A_min;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が大きい場合：Aの最小値～Aの最大値まで重複
		else if (A_min >= B_min && A_max <= B_max) {
			answer = A_max - A_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が小さい場合：Bの最小値～Bの最大値まで重複
		else if (A_min <= B_min && A_max >= B_max) {
			answer = B_max - B_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が大きい場合：Bの最小値～Aの最大値まで重複
		else {
			answer = A_max - B_min;
		} A_min > B_max || A_max < B_min A_min > B_max A_min B_max A_max < B_min A_max B_min {
			answer = 0;
		} answer = 0 answer 0 if (A_min >= B_min && A_max >= B_max) {
			answer = B_max - A_min;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が大きい場合：Aの最小値～Aの最大値まで重複
		else if (A_min >= B_min && A_max <= B_max) {
			answer = A_max - A_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が小さい場合：Bの最小値～Bの最大値まで重複
		else if (A_min <= B_min && A_max >= B_max) {
			answer = B_max - B_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が大きい場合：Bの最小値～Aの最大値まで重複
		else {
			answer = A_max - B_min;
		} A_min >= B_min && A_max >= B_max A_min >= B_min A_min B_min A_max >= B_max A_max B_max {
			answer = B_max - A_min;
		} answer = B_max - A_min answer B_max - A_min B_max A_min if (A_min >= B_min && A_max <= B_max) {
			answer = A_max - A_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が小さい場合：Bの最小値～Bの最大値まで重複
		else if (A_min <= B_min && A_max >= B_max) {
			answer = B_max - B_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が大きい場合：Bの最小値～Aの最大値まで重複
		else {
			answer = A_max - B_min;
		} A_min >= B_min && A_max <= B_max A_min >= B_min A_min B_min A_max <= B_max A_max B_max {
			answer = A_max - A_min;
		} answer = A_max - A_min answer A_max - A_min A_max A_min if (A_min <= B_min && A_max >= B_max) {
			answer = B_max - B_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が大きい場合：Bの最小値～Aの最大値まで重複
		else {
			answer = A_max - B_min;
		} A_min <= B_min && A_max >= B_max A_min <= B_min A_min B_min A_max >= B_max A_max B_max {
			answer = B_max - B_min;
		} answer = B_max - B_min answer B_max - B_min B_max B_min {
			answer = A_max - B_min;
		} answer = A_max - B_min answer A_max - B_min A_max B_min System.out.println(answer) System.out.println System.out System System.out answer String[] args args public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		//入力 A: Alice、B:Bob
		int A_min = sc.nextInt();
		int A_max = sc.nextInt();
		int B_min = sc.nextInt();
		int B_max = sc.nextInt();
		int answer = 0;

		//Aの最小値よりBの最大値が小さい、もしくは、Aの最大値よりBの最小値が大きい場合：区間の重複はないため答えは0
		if (A_min > B_max || A_max < B_min) {
			answer = 0;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が小さい場合：Aの最小値～Bの最大値まで重複
		else if (A_min >= B_min && A_max >= B_max) {
			answer = B_max - A_min;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が大きい場合：Aの最小値～Aの最大値まで重複
		else if (A_min >= B_min && A_max <= B_max) {
			answer = A_max - A_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が小さい場合：Bの最小値～Bの最大値まで重複
		else if (A_min <= B_min && A_max >= B_max) {
			answer = B_max - B_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が大きい場合：Bの最小値～Aの最大値まで重複
		else {
			answer = A_max - B_min;
		}
//		else if (A_min <= B_min && A_max >= B_max) {
//			answer = A_max - B_min;
//		}

		System.out.println(answer);
	}
} public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		//入力 A: Alice、B:Bob
		int A_min = sc.nextInt();
		int A_max = sc.nextInt();
		int B_min = sc.nextInt();
		int B_max = sc.nextInt();
		int answer = 0;

		//Aの最小値よりBの最大値が小さい、もしくは、Aの最大値よりBの最小値が大きい場合：区間の重複はないため答えは0
		if (A_min > B_max || A_max < B_min) {
			answer = 0;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が小さい場合：Aの最小値～Bの最大値まで重複
		else if (A_min >= B_min && A_max >= B_max) {
			answer = B_max - A_min;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が大きい場合：Aの最小値～Aの最大値まで重複
		else if (A_min >= B_min && A_max <= B_max) {
			answer = A_max - A_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が小さい場合：Bの最小値～Bの最大値まで重複
		else if (A_min <= B_min && A_max >= B_max) {
			answer = B_max - B_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が大きい場合：Bの最小値～Aの最大値まで重複
		else {
			answer = A_max - B_min;
		}
//		else if (A_min <= B_min && A_max >= B_max) {
//			answer = A_max - B_min;
//		}

		System.out.println(answer);
	}
} Main
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		//入力 A: Alice、B:Bob
		int A_min = sc.nextInt();
		int A_max = sc.nextInt();
		int B_min = sc.nextInt();
		int B_max = sc.nextInt();
		int answer = 0;

		//Aの最小値よりBの最大値が小さい、もしくは、Aの最大値よりBの最小値が大きい場合：区間の重複はないため答えは0
		if (A_min > B_max || A_max < B_min) {
			answer = 0;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が小さい場合：Aの最小値～Bの最大値まで重複
		else if (A_min >= B_min && A_max >= B_max) {
			answer = B_max - A_min;
		}

		//Aの最小値よりBの最小値が小さく、Aの最大値よりBの最大値が大きい場合：Aの最小値～Aの最大値まで重複
		else if (A_min >= B_min && A_max <= B_max) {
			answer = A_max - A_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が小さい場合：Bの最小値～Bの最大値まで重複
		else if (A_min <= B_min && A_max >= B_max) {
			answer = B_max - B_min;
		}

		//Aの最小値よりBの最小値が大きく、Aの最大値よりBの最大値が大きい場合：Bの最小値～Aの最大値まで重複
		else {
			answer = A_max - B_min;
		}
//		else if (A_min <= B_min && A_max >= B_max) {
//			answer = A_max - B_min;
//		}

		System.out.println(answer);
	}
}
