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.
#include <bits/stdc++.h>
int exp(int x, int y, int p) {
  int res = 1;
  while (y) {
    if (y % 2) res = (res * x % p) % p;
    x = (x * x) % p;
    y /= 2;
  }
  return res;
}
int expo(int x, int y) {
  int res = 1;
  while (y) {
    if (y % 2) res = (res * x % ((int)1e9 + 7)) % ((int)1e9 + 7);
    x = (x * x) % ((int)1e9 + 7);
    y /= 2;
  }
  return res;
}
int add(long long a, long long b) {
  return (a % ((int)1e9 + 7) + b % ((int)1e9 + 7) + ((int)1e9 + 7)) %
         ((int)1e9 + 7);
}
int sub(int a, int b) {
  return (a % ((int)1e9 + 7) - b % ((int)1e9 + 7) + ((int)1e9 + 7)) %
         ((int)1e9 + 7);
}
int mul(int a, int b) {
  return ((a % ((int)1e9 + 7)) * (b % ((int)1e9 + 7)) + ((int)1e9 + 7)) %
         ((int)1e9 + 7);
}
int inv(int x) { return expo(x, ((int)1e9 + 7) - 2); }
using namespace std;
vector<string> vec_splitter(string s) {
  s += ',';
  vector<string> res;
  while (!s.empty()) {
    res.push_back(s.substr(0, s.find(',')));
    s = s.substr(s.find(',') + 1);
  }
  return res;
}
void debug_out(vector<string> __attribute__((unused)) args,
               __attribute__((unused)) int idx,
               __attribute__((unused)) int LINE_NUM) {
  cerr << endl;
}
template <typename Head, typename... Tail>
void debug_out(vector<string> args, int idx, int LINE_NUM, Head H, Tail... T) {
  if (idx > 0)
    cerr << ", ";
  else
    cerr << "Line(" << LINE_NUM << ") ";
  stringstream ss;
  ss << H;
  cerr << args[idx] << " = " << ss.str();
  debug_out(args, idx + 1, LINE_NUM, T...);
}
long long Ceil(long long a, long long b) { return (a / b) + ((a % b) != 0); }
int main() {
  int t;
  cin >> t;
  while (t--) {
    long long n, x, m;
    cin >> n >> x >> m;
    long long X = x, Y = x;
    for (int i = 1; i <= m; i++) {
      long long a, b;
      cin >> a >> b;
      if (X < a && Y >= a || X <= b && Y > b || X >= a && Y <= b) {
        X = min(X, a);
        Y = max(Y, b);
      }
    }
    cout << Y - X + 1 << "\n";
  }
}
