Paprika loves permutations. She has an array a_1, a_2, ..., a_n. She wants to make the array a permutation of integers 1 to n.

In order to achieve this goal, she can perform operations on the array. In each operation she can choose two integers i (1 ≤ i ≤ n) and x (x > 0), then perform a_i := a_i mod x (that is, replace a_i by the remainder of a_i divided by x). In different operations, the chosen i and x can be different.

Determine the minimum number of operations needed to make the array a permutation of integers 1 to n. If it is impossible, output -1.

A permutation is an array consisting of n distinct integers from 1 to n in arbitrary order. For example, [2,3,1,5,4] is a permutation, but [1,2,2] is not a permutation (2 appears twice in the array) and [1,3,4] is also not a permutation (n=3 but there is 4 in the array).

Input

Each test contains multiple test cases. The first line contains a single integer t (1 ≤ t ≤ 10^4) — the number of test cases. Description of the test cases follows.

The first line of each test case contains an integer n (1 ≤ n ≤ 10^5).

The second line of each test case contains n integers a_1, a_2, ..., a_n. (1 ≤ a_i ≤ 10^9).

It is guaranteed that the sum of n over all test cases does not exceed 2 ⋅ 10^5.

Output

For each test case, output the minimum number of operations needed to make the array a permutation of integers 1 to n, or -1 if it is impossible.

Example

Input


4
2
1 7
3
1 5 4
4
12345678 87654321 20211218 23571113
9
1 2 3 4 18 19 5 6 7


Output


1
-1
4
2

Note

For the first test, the only possible sequence of operations which minimizes the number of operations is: 

  * Choose i=2, x=5. Perform a_2 := a_2 mod 5 = 2. 



For the second test, it is impossible to obtain a permutation of integers from 1 to n.
8
2
2 3
3
3 4 5
1
1
1
2
1
3
1
4
1
12071207
5
5 5 5 9 14

1
2
0
-1
1
1
1
4

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//


import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.*;

public class CFC {
    static CFC.Reader sc = new CFC.Reader();
    static BufferedWriter bw;
    static int team1;
    static int team2;
    static int minkicks;

    public CFC() {
    }

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        process:
        for (int p = 0; p < t; p++) {
            int n=sc.nextInt();
            int[] ar=new int[n];
            boolean[] check=new boolean[n+1];
            int sum=0;
            List<Integer> list=new ArrayList<>();
            for(int i=0;i<n;i++){
                ar[i]=sc.nextInt();
                if(ar[i]<=n){
                    check[ar[i]]=true;
                }else {
                    list.add(ar[i]);
                }


            }
            Collections.sort(list);
            int c=0;
           process1: for(int i=1;i<=n;i++){
                if(!check[i]){
                    if(c>=list.size()){
                        System.out.println(-1);
                        continue process;
                    }
                    int num=list.get(c);
                    int fn=num-i;
                    for(int j=1;j*j<=fn;j++){
                        if(fn%j==0){
                            if(j>i||fn/j>i){
                                c++;
                                continue process1;
                            }
                        }
                    }
                    System.out.println(-1);
                    continue process;
                }
            }
            System.out.println(list.size());







        }


        bw.flush();
        bw.close();
    }

    public static class Numb{
        int num,s;
    }

    public static boolean checkbool(String s) {
        int i = 0;
        int j = s.length() - 1;
        while (i < j) {
            if (s.charAt(i) != s.charAt(j)) return false;
            i++;
            j--;
        }
        return true;
    }

    public static int checker(int a) {
        if (a % 2 == 0) {
            return 1;
        } else {
            byte b;
            do {
                b = 2;
            } while (a + b != (a ^ b));

            return b;
        }
    }

    public static boolean checkPrime(int n) {
        if (n != 0 && n != 1) {
            for (int j = 2; j * j <= n; ++j) {
                if (n % j == 0) {
                    return false;
                }
            }

            return true;
        } else {
            return false;
        }
    }

    public static void dfs1(List<List<Integer>> g, boolean[] visited, Stack<Integer> stack, int num) {
        visited[num] = true;
        Iterator var4 = ((List) g.get(num)).iterator();

        while (var4.hasNext()) {
            Integer integer = (Integer) var4.next();
            if (!visited[integer]) {
                dfs1(g, visited, stack, integer);
            }
        }

        stack.push(num);
    }

    public static void dfs2(List<List<Integer>> g, boolean[] visited, List<Integer> list, int num, int c, int[] raj) {
        visited[num] = true;
        Iterator var6 = ((List) g.get(num)).iterator();

        while (var6.hasNext()) {
            Integer integer = (Integer) var6.next();
            if (!visited[integer]) {
                dfs2(g, visited, list, integer, c, raj);
            }
        }

        raj[num] = c;
        list.add(num);
    }

    public static int inputInt() throws IOException {
        return sc.nextInt();
    }

    public static long inputLong() throws IOException {
        return sc.nextLong();
    }

    public static double inputDouble() throws IOException {
        return sc.nextDouble();
    }

    public static String inputString() throws IOException {
        return sc.readLine();
    }

    public static void print(String a) throws IOException {
        bw.write(a);
    }

    public static void printSp(String a) throws IOException {
        bw.write(a + " ");
    }

    public static void println(String a) throws IOException {
        bw.write(a + "\n");
    }

    public static long getAns(int[] ar, int c, long[][] dp, int i, int sign) {
        if (i < 0) {
            return 1L;
        } else if (c <= 0) {
            return 1L;
        } else {
            dp[i][c] = Math.max(dp[i][c], Math.max((long) ar[i] * getAns(ar, c - 1, dp, i - 1, sign), getAns(ar, c, dp, i - 1, 1)));
            return dp[i][c];
        }
    }

    public static long power(long a, long b, long c) {
        long ans;
        for (ans = 1L; b != 0L; b /= 2L) {
            if (b % 2L == 1L) {
                ans *= a;
                ans %= c;
            }

            a *= a;
            a %= c;
        }

        return ans;
    }

    public static long power1(long a, long b, long c) {
        long ans;
        for (ans = 1L; b != 0L; b /= 2L) {
            if (b % 2L == 1L) {
                ans = multiply(ans, a, c);
            }

            a = multiply(a, a, c);
        }

        return ans;
    }

    public static long multiply(long a, long b, long c) {
        long res = 0L;

        for (a %= c; b > 0L; b /= 2L) {
            if (b % 2L == 1L) {
                res = (res + a) % c;
            }

            a = (a + a) % c;
        }

        return res % c;
    }

    public static long totient(long n) {
        long result = n;

        for (long i = 2L; i * i <= n; ++i) {
            if (n % i == 0L) {
                while (n % i == 0L) {
                    n /= i;
                }

                result -= result / i;
            }
        }

        if (n > 1L) {
            result -= result / n;
        }

        return result;
    }

    public static long gcd(long a, long b) {
        return b == 0L ? a : gcd(b, a % b);
    }

    public static boolean[] primes(int n) {
        boolean[] p = new boolean[n + 1];
        p[0] = false;
        p[1] = false;

        int i;
        for (i = 2; i <= n; ++i) {
            p[i] = true;
        }

        for (i = 2; i * i <= n; ++i) {
            if (p[i]) {
                for (int j = i * i; j <= n; j += i) {
                    p[j] = false;
                }
            }
        }

        return p;
    }

    public String LargestEven(String S) {
        int[] count = new int[10];

        int num;
        for (num = 0; num < S.length(); ++num) {
            ++count[S.charAt(num) - 48];
        }

        num = -1;

        for (int i = 0; i <= 8; i += 2) {
            if (count[i] > 0) {
                num = i;
                break;
            }
        }

        StringBuilder ans = new StringBuilder();

        for (int i = 9; i >= 0; --i) {
            int j;
            if (i != num) {
                for (j = 1; j <= count[i]; ++j) {
                    ans.append(i);
                }
            } else {
                for (j = 1; j <= count[num] - 1; ++j) {
                    ans.append(num);
                }
            }
        }

        if (num != -1 && count[num] > 0) {
            ans.append(num);
        }

        return ans.toString();
    }

    static {
        bw = new BufferedWriter(new OutputStreamWriter(System.out));
        team1 = 0;
        team2 = 0;
        minkicks = 10;
    }

    public static class Score {
        int l;
        String s;

        public Score(int l, String s) {
            this.l = l;
            this.s = s;
        }
    }

    public static class Ath {
        int r1;
        int r2;
        int r3;
        int r4;
        int r5;
        int index;

        public Ath(int r1, int r2, int r3, int r4, int r5, int index) {
            this.r1 = r1;
            this.r2 = r2;
            this.r3 = r3;
            this.r4 = r4;
            this.r5 = r5;
            this.index = index;
        }
    }

    static class Reader {
        private final int BUFFER_SIZE = 65536;
        private DataInputStream din;
        private byte[] buffer;
        private int bufferPointer;
        private int bytesRead;

        public Reader() {
            this.din = new DataInputStream(System.in);
            this.buffer = new byte[65536];
            this.bufferPointer = this.bytesRead = 0;
        }

        public Reader(String file_name) throws IOException {
            this.din = new DataInputStream(new FileInputStream(file_name));
            this.buffer = new byte[65536];
            this.bufferPointer = this.bytesRead = 0;
        }

        public String readLine() throws IOException {
            byte[] buf = new byte[64];

            int cnt;
            byte c;
            for (cnt = 0; (c = this.read()) != -1 && c != 10; buf[cnt++] = (byte) c) {
            }

            return new String(buf, 0, cnt);
        }

        public int nextInt() throws IOException {
            int ret = 0;

            byte c;
            for (c = this.read(); c <= 32; c = this.read()) {
            }

            boolean neg = c == 45;
            if (neg) {
                c = this.read();
            }

            do {
                ret = ret * 10 + c - 48;
            } while ((c = this.read()) >= 48 && c <= 57);

            return neg ? -ret : ret;
        }

        public long nextLong() throws IOException {
            long ret = 0L;

            byte c;
            for (c = this.read(); c <= 32; c = this.read()) {
            }

            boolean neg = c == 45;
            if (neg) {
                c = this.read();
            }

            do {
                ret = ret * 10L + (long) c - 48L;
            } while ((c = this.read()) >= 48 && c <= 57);

            return neg ? -ret : ret;
        }

        public double nextDouble() throws IOException {
            double ret = 0.0D;
            double div = 1.0D;

            byte c;
            for (c = this.read(); c <= 32; c = this.read()) {
            }

            boolean neg = c == 45;
            if (neg) {
                c = this.read();
            }

            do {
                ret = ret * 10.0D + (double) c - 48.0D;
            } while ((c = this.read()) >= 48 && c <= 57);

            if (c == 46) {
                while ((c = this.read()) >= 48 && c <= 57) {
                    ret += (double) (c - 48) / (div *= 10.0D);
                }
            }

            return neg ? -ret : ret;
        }

        private void fillBuffer() throws IOException {
            this.bytesRead = this.din.read(this.buffer, this.bufferPointer = 0, 65536);
            if (this.bytesRead == -1) {
                this.buffer[0] = -1;
            }

        }

        private byte read() throws IOException {
            if (this.bufferPointer == this.bytesRead) {
                this.fillBuffer();
            }

            return this.buffer[this.bufferPointer++];
        }

        public void close() throws IOException {
            if (this.din != null) {
                this.din.close();
            }
        }
    }
}
