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

public class Codechef
{
   
    //static boolean vis[];
    int max = (int)1e5+1;
    static ArrayList<Integer>graph[];
    static int q_v[];
    static ArrayList<Integer>qs[];
    static int q_c[];
    static int arr[];
    static int temp[];
	public static void main (String[] args) throws java.lang.Exception
	{
	    InputReader input = new InputReader(System.in);
	    OutputWriter out = new OutputWriter(System.out);
	    HashMap<Integer,Integer>map = new HashMap<>();
	    int n = input.readInt();
	    int q = input.readInt();
	    arr = new int[n];
	    for(int i =0;i<n;i++){
	        arr[i] = input.readInt();
	        map.put(arr[i],map.getOrDefault(arr[i],0)+1);
	    }
	    int dp[] = new int[30];
	    Arrays.fill(dp,1000000009);
	    for(int j =0;j<30;j++){
	        int a = 1<<j;
	        if(map.containsKey(a))dp[j] = 1;
	            if(dp[j] != 1){
	                for(int y =1;y<j;y++){
	                    int z = 1<<y;
	                    int t = a/z;
	                    if(map.containsKey(z) && map.get(z)>=t){
	                          dp[j] = Math.min(dp[j],map.get(z));
	                    }
	                }
	            }
	        }
	    for(int z =0;z<q;z++){
	        int t = input.readInt();
	        int ans =0;
	        int res =0;
	        for(int i =31;i>=0;i--){
	            if((t&(1<<i)) != 0){
	                if(dp[i] != 1000000009){
	                    res+=(1<<i);
	                    ans+=dp[i];
	                }
	            }
	        }
	        if(res != t)ans = 0;
	        if(ans != 0 )System.out.println(ans);
	        else System.out.println(-1);
	    }
	}
}
 class InputReader{
		private InputStream stream;
		private byte[] buf = new byte[1024];
		private int curChar;
		private int numChars;
		private SpaceCharFilter filter;
		
		public InputReader(InputStream stream) {
			this.stream = stream;
		}
		
		public int read() {
			if (numChars == -1) {
				throw new InputMismatchException();
			}
			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					throw new InputMismatchException();
				}
				if (numChars <= 0) {
					return -1;
				}
			}
			return buf[curChar++];
		}
		
		public int readInt() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			int res = 0;
			do {
				if (c < '0' || c > '9') {
					throw new InputMismatchException();
				}
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));
			return res * sgn;
		}
		
		public String readString() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			StringBuilder res = new StringBuilder();
			do {
				res.appendCodePoint(c);
				c = read();
			} while (!isSpaceChar(c));
			return res.toString();
		}
		
		public double readDouble() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			double res = 0;
			while (!isSpaceChar(c) && c != '.') {
				if (c == 'e' || c == 'E') {
					return res * Math.pow(10, readInt());
				}
				if (c < '0' || c > '9') {
					throw new InputMismatchException();
				}
				res *= 10;
				res += c - '0';
				c = read();
			}
			if (c == '.') {
				c = read();
				double m = 1;
				while (!isSpaceChar(c)) {
					if (c == 'e' || c == 'E') {
						return res * Math.pow(10, readInt());
					}
					if (c < '0' || c > '9') {
						throw new InputMismatchException();
					}
					m /= 10;
					res += (c - '0') * m;
					c = read();
				}
			}
			return res * sgn;
		}
		
		public long readLong() {
			int c = read();
			while (isSpaceChar(c)) {
				c = read();
			}
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			long res = 0;
			do {
				if (c < '0' || c > '9') {
					throw new InputMismatchException();
				}
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));
			return res * sgn;
		}
		
		public boolean isSpaceChar(int c) {
			if (filter != null) {
				return filter.isSpaceChar(c);
			}
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}
		
		public String next() {
			return readString();
		}
		
		public interface SpaceCharFilter {
			public boolean isSpaceChar(int ch);
		}
	}
	
 class OutputWriter {
		private final PrintWriter writer;
		
		public OutputWriter(OutputStream outputStream) {
			writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
		}
		
		public OutputWriter(Writer writer) {
			this.writer = new PrintWriter(writer);
		}
		
		public void print(Object... objects) {
			for (int i = 0; i < objects.length; i++) {
				if (i != 0) {
					writer.print(' ');
				}
				writer.print(objects[i]);
			}
			writer.flush();
		}
		
		public void printLine(Object... objects) {
			print(objects);
			writer.println();
			writer.flush();
		}
		
		public void close() {
			writer.close();
		}
		
		public void flush() {
			writer.flush();
		}
	}
	   
//********************************************************************************************************************************
//////////////////////////////////NOTESSS//////////////////////////////////////////////////////////////////////
/*remember substring length you are dealing with take only those substrings
chain like pattern -> linked list (or) to from Arrays
finding degree can be done during input scanning itself(ok&=true:false flag trick)
longest subsquence can be solved in O(n) itself incase of consecutive numbers why try all subsequence go o dp[i-1]
(*******consecutive numberssssss*********)
initialize all global variables and collection ds
swapping changes the arr so make sure initialize with the original again
missing out character when comparing ==0 instead of =='0'
*/
