You are given a sequence a consisting of n integers a_1, a_2, ..., a_n, and an integer x. Your task is to make the sequence a sorted (it is considered sorted if the condition a_1 ≤ a_2 ≤ a_3 ≤ ... ≤ a_n holds).

To make the sequence sorted, you may perform the following operation any number of times you want (possibly zero): choose an integer i such that 1 ≤ i ≤ n and a_i > x, and swap the values of a_i and x.

For example, if a = [0, 2, 3, 5, 4], x = 1, the following sequence of operations is possible:

  1. choose i = 2 (it is possible since a_2 > x), then a = [0, 1, 3, 5, 4], x = 2; 
  2. choose i = 3 (it is possible since a_3 > x), then a = [0, 1, 2, 5, 4], x = 3; 
  3. choose i = 4 (it is possible since a_4 > x), then a = [0, 1, 2, 3, 4], x = 5. 



Calculate the minimum number of operations you have to perform so that a becomes sorted, or report that it is impossible.

Input

The first line contains one integer t (1 ≤ t ≤ 500) — the number of test cases.

Each test case consists of two lines. The first line contains two integers n and x (1 ≤ n ≤ 500, 0 ≤ x ≤ 500) — the number of elements in the sequence and the initial value of x.

The second line contains n integers a_1, a_2, ..., a_n (0 ≤ a_i ≤ 500).

The sum of values of n over all test cases in the input does not exceed 500.

Output

For each test case, print one integer — the minimum number of operations you have to perform to make a sorted, or -1, if it is impossible.

Example

Input


6
4 1
2 3 5 4
5 6
1 1 3 4 4
1 10
2
2 10
11 9
2 10
12 11
5 18
81 324 218 413 324


Output


3
0
0
-1
1
3
#pragma comment(linker, "/STACK:2000000000")
# include <iostream>
# include <cmath>
# include <algorithm>
# include <stdio.h>
# include <cstdint>
# include <cstring>
# include <string>
# include <cstdlib>
# include <vector>
# include <bitset>
# include <map>
# include <queue>
# include <ctime>
# include <stack>
# include <set>
# include <list>
# include <random>
# include <deque>
# include <functional>
# include <iomanip>
# include <sstream>
# include <fstream>
# include <complex>
# include <numeric>
# include <immintrin.h>
# include <cassert>
# include <array>
# include <tuple>
# include <unordered_map>
# include <unordered_set>
# include <thread>

using namespace std;

using ll = long long;
using ull = unsigned long long;
using ld = long double;
using ui32 = unsigned int;
constexpr ll INFLL = 1e18;

#define CHECK_IMPL1(cond)              \
if (!(cond)) {                         \
    DEBUG("expected cond: " << #cond); \
    assert(cond);                      \
}

#define CHECK_IMPL2(cond, message)                                            \
if (!(cond)) {                                                                \
    DEBUG("expected cond: " << #cond << " failed with message: " << message); \
    assert(cond);                                                             \
}
#define CHECK_IMPL(_1, _2, NAME, ...) NAME
#define CHECK(...) CHECK_IMPL(__VA_ARGS__, CHECK_IMPL2, CHECK_IMPL1, CHECK_IMPL0)(__VA_ARGS__)

#ifdef __APPLE__
#define DEBUG(message) std::cerr << message << std::endl;
#else
#define DEBUG(message)
#endif

const int INF = 1000 * 1000 * 1000;

class Solver {
public:
    void main() {
        int n, x;
        cin >> n >> x;
        vector<int> a(n);
        for (int i = 0; i < n; i++) {
            cin >> a[i];
        }
        vector<vector<int>> dp(501, vector<int>(501, INF));
        auto new_dp = dp;
        dp[0][x] = 0;
        for (int i = 0; i < n; i++) {
            for (int last = 0; last <= 500; last++) {
                for (int cur_x = 0; cur_x <= 500; cur_x++) {
                    if (dp[last][cur_x] == INF) {
                        continue;
                    }
                    if (a[i] >= last) {
                        new_dp[a[i]][cur_x] = min(new_dp[a[i]][cur_x], dp[last][cur_x]);
                    }
                    if (a[i] > cur_x && cur_x >= last) {
                        new_dp[cur_x][a[i]] = min(new_dp[cur_x][a[i]], dp[last][cur_x] + 1);
                    }
                }
            }
            dp = new_dp;
//            for (int last = 0; last <= 500; last++) {
//                for (int cur_x = 0; cur_x <= 500; cur_x++) {
//                    if (dp[last][cur_x] == INF) {
//                        continue;
//                    }
//                    DEBUG("i: " << i << " last: " << last << " cur_x: " << cur_x << " dp: " << dp[last][cur_x]);
//                }
//            }
            new_dp = vector<vector<int>>(501, vector<int>(501, INF));
        }
        int ans = INF;
        for (int i = 0; i <= 500; i++) {
            for (int j = 0; j <= 500; j++) {
                ans = min(ans, dp[i][j]);
            }
        }
        if (ans == INF) {
            cout << "-1\n";
        } else {
            cout << ans << "\n";
        }
    }
};

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
#ifdef __APPLE__
    freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);
#endif

    int t = 1;
    cin >> t;
    for (int i = 1; i <= t; i++) {
        Solver{}.main();
    }
    return 0;
}
