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.
/* package codechef; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
public class Codechef
{
	public static void main (String[] args) throws java.lang.Exception
	{
		// your code goes here
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int t = Integer.parseInt(br.readLine());
		while(t--!=0){
		  //  int a = Integer.parseInt(br.readLine());
		  //  int[] arr = new int[n];
		    String[] in = br.readLine().split(" ");
		  //  for(int i=0;i<n;i++){
		  //      arr[i] = Integer.parseInt(in[i]);
		  //  }
		  long n = Long.parseLong(in[0]);
		  long x = Long.parseLong(in[1]);
		  int m = Integer.parseInt(in[2]);
		  
		  boolean flag = true;
		  
		  int left = -1,right = -1;
		  for(int i=0;i<m;i++){
		      in = br.readLine().split(" ");
		      int l = Integer.parseInt(in[0]);
		      int r = Integer.parseInt(in[1]);
		      
		      if(flag){
		          if(l>x || r<x){
		              continue;
		          }else{
		              
		                  left = l;
		                  right = r;
		                  flag = false;
		          }
		          
		      }else{
		          if(r>=left && l<=left && r<=right){
		              left = l;
		          }else if(l<=right && r>=right && l>=left){
		              right = r;
		          }else if(l<=left && r>=right){
		              left = l;
		              right = r;
		          }
		      }
		  }
		  if(left==-1 && right == -1){
		      System.out.println(1);
		      continue;
		  }
		  System.out.println(right-left+1);
		  //long ans = 0;
		  //if(a==0 || b==0){
		  //    System.out.println(0);
		  //    continue;
		  //}
		  //else if(Math.max(a,b)>=Math.min(a,b)*2){
		  //    System.out.println(Math.min(a,b));
		  //    continue;
		  //}else{
		  //    ans = Math.min(a,b)/2;
		  //    if(a>b){
		  //        a-=(ans*2);
    //               b-=ans;		          
		  //    }else{
		  //        a-=ans;
		  //        b-=(ans*2);
		  //    }
		  //    while(a>1 && b>1){
		  //        long temp = Math.min(a,b)/2;
		  //        ans += temp;
		          
		  //      if(a>b){
		  //        a-=(temp*2);
    //               b-=temp;		          
		  //      }else{
		  //        a-=temp;
		  //        b-=(temp*2);
		  //    }
		  //    }
		  //    if((a==1 || b==1) && a!=b){
		  //        ans+=1;
		  //    }
		  //}
		  //System.out.println(ans);
		}
	}
}
