You are given an array consisting of n integers a_1, a_2, ..., a_n. Initially a_x = 1, all other elements are equal to 0.

You have to perform m operations. During the i-th operation, you choose two indices c and d such that l_i ≤ c, d ≤ r_i, and swap a_c and a_d.

Calculate the number of indices k such that it is possible to choose the operations so that a_k = 1 in the end.

Input

The first line contains a single integer t (1 ≤ t ≤ 100) — the number of test cases. Then the description of t testcases follow.

The first line of each test case contains three integers n, x and m (1 ≤ n ≤ 10^9; 1 ≤ m ≤ 100; 1 ≤ x ≤ n).

Each of next m lines contains the descriptions of the operations; the i-th line contains two integers l_i and r_i (1 ≤ l_i ≤ r_i ≤ n).

Output

For each test case print one integer — the number of indices k such that it is possible to choose the operations so that a_k = 1 in the end.

Example

Input


3
6 4 3
1 6
2 3
5 5
4 1 2
2 4
1 2
3 3 2
2 3
1 2


Output


6
2
3

Note

In the first test case, it is possible to achieve a_k = 1 for every k. To do so, you may use the following operations:

  1. swap a_k and a_4; 
  2. swap a_2 and a_2; 
  3. swap a_5 and a_5. 



In the second test case, only k = 1 and k = 2 are possible answers. To achieve a_1 = 1, you have to swap a_1 and a_1 during the second operation. To achieve a_2 = 1, you have to swap a_1 and a_2 during the second operation.
import java.util.ArrayList;
import java.util.Scanner;

public class Shuffle {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int test = s.nextInt();
        for (int t = 0; t < test; t++) {
            int n = s.nextInt();
            int x = s.nextInt();
            int m = s.nextInt();
            ArrayList<Pair> arr = new ArrayList<>();
            arr.add(new Pair(x, x));
            for (int i = 0; i < m; i++) {
                int l = s.nextInt();
                int r = s.nextInt();
                if (checkRange(l, r, arr)) {
                    mergeRange(l, r, arr);
                }
            }
            int count = 0;
            for (Pair p : arr) {
                count += p.y - p.x + 1;
            }
            System.out.println(count);
        }
    }

    private static void mergeRange(int l, int r, ArrayList<Pair> arr) {
        int i = 0;
        while (i < arr.size()) {
            Pair p = arr.get(i);
            if (intersect(l, r, p) && (l != p.x || r != p.y)) {
                arr.remove(p);
                l = Math.min(l, p.x);
                r = Math.max(r, p.y);
                arr.add(new Pair(l, r));
            } else {
                i++;
            }
        }
    }

    private static boolean intersect(int l, int r, Pair p) {
        if (l >= p.x && l <= p.y) {
            return true;
        }
        if (r >= p.x && r <= p.y) {
            return true;
        }
        if (p.x >= l && p.y <= r) {
            return true;
        }
        return false;
    }

    private static boolean checkRange(int l, int r, ArrayList<Pair> arr) {
        for (Pair p : arr) {
            if (l >= p.x && l <= p.y) {
                return true;
            }
            if (r >= p.x && r <= p.y) {
                return true;
            }
            if (p.x >= l && p.y <= r) {
                return true;
            }
        }
        return false;
    }
}

class Pair {
    int x;
    int y;

    Pair(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
