Polycarp has n coins, the value of the i-th coin is a_i. It is guaranteed that all the values are integer powers of 2 (i.e. a_i = 2^d for some non-negative integer number d).

Polycarp wants to know answers on q queries. The j-th query is described as integer number b_j. The answer to the query is the minimum number of coins that is necessary to obtain the value b_j using some subset of coins (Polycarp can use only coins he has). If Polycarp can't obtain the value b_j, the answer to the j-th query is -1.

The queries are independent (the answer on the query doesn't affect Polycarp's coins).

Input

The first line of the input contains two integers n and q (1 ≤ n, q ≤ 2 ⋅ 10^5) — the number of coins and the number of queries.

The second line of the input contains n integers a_1, a_2, ..., a_n — values of coins (1 ≤ a_i ≤ 2 ⋅ 10^9). It is guaranteed that all a_i are integer powers of 2 (i.e. a_i = 2^d for some non-negative integer number d).

The next q lines contain one integer each. The j-th line contains one integer b_j — the value of the j-th query (1 ≤ b_j ≤ 10^9).

Output

Print q integers ans_j. The j-th integer must be equal to the answer on the j-th query. If Polycarp can't obtain the value b_j the answer to the j-th query is -1.

Example

Input

5 4
2 4 8 2 4
8
5
14
10


Output

1
-1
3
2
import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.HashMap;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author Harshal Khodifad
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        Scanner in = new Scanner(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        TaskD solver = new TaskD();
        solver.solve(1, in, out);
        out.close();
    }

    static class TaskD {
        public void solve(int testNumber, Scanner in, PrintWriter out) {
            long n = in.nextLong();
            long d = in.nextLong();

            long[] a = new long[(int) n];
            long[] b = new long[(int) d];

            long count[] = new long[31];
            count[0] = 0;
            long pow[] = new long[31];
            pow[0] = 1;

            HashMap<Long, Integer> map = new HashMap<>();
            map.put((long) 1, 0);

            for (int i = 1; i < 31; i++) {
                count[i] = 0;
                pow[i] = 2 * pow[i - 1];
                //out.println(pow[i]);
                map.put(pow[i], i);
            }

            for (int i = 0; i < n; i++) {
                a[i] = in.nextInt();
                count[map.get(a[i])]++;
            }

            long c = 0;

            for (int i = 0; i < d; i++) {
                long x = in.nextLong();

                c = 0;

                for (int j = 30; j >= 0; j--) {
                    long req = x / pow[j];
                    if (req > count[j]) {
                        x -= pow[j] * count[j];
                        c += count[j];
                    } else {
                        x -= req * pow[j];
                        c += req;
                    }
                }

                if (x == 0) out.println(c);
                else out.println(-1);
            }


        }

    }
}

