/* paiza POH! Vol.1
 * result:
 * http://p...content-available-to-author-only...a.jp/poh/ec-campaign/result/0c371ebace27b7f2fb8ee1dfb57bfbd4
 * author: Leonardone @ NEETSDKASU
 */
#include <stdio.h>
#include <stdlib.h>
#define DFSIZE (5)

int list[500000];

int mysort( const void * a , const void * b ) {
	return *(int*)b - *(int*)a;
}

inline int gc(void) {
    register int c, n = 0;
    do {
        c = getchar();
    } while ((c < '0') || (c > '9'));
    do {
        n = n * 10 + (c - '0');
        c = getchar();
    } while ((c >= '0') && (c <= '9'));
    return n;
}

void pi(register int n) {
	register int t;
	if (n < 10) {
		putchar(n + '0');
	} else {
		t = n / 10;
		pi(t);
		putchar(n - t * 10 + '0');
	}
}

int foo(const int *p, const int f, const int e, const int m) {
    int ci, df = e - f;
    if (df < DFSIZE) return f;
    if (m < p[ci = (f + (df >> 1))]) {
        return foo(p, ci, e, m);
    } else {
        return foo(p, f, ci, m);
    }
}

int bar(const int *p, const int f, const int e, const int m) {
    int ci, df = e - f;
    if (df < DFSIZE) return e;
    if (m < p[ci = (f + (df >> 1))]) {
        return bar(p, ci, e, m);
    } else {
        return bar(p, f, ci, m);
    }
}

int main(void) {
    register int j, *f, *e, sum, tmp;
    int n, d, m, p, fi;
    
    n = gc();
    d = gc();
    
    f = list;
    j = n;
    while (j) {
        f[--j] = gc();
    }
    qsort(list, n, sizeof(int), mysort);
    
    --n;
    j = d + 1;
    while (--j) {
        m = gc();
        f = list + (fi = foo(list, 0, n, m));
        e = list + bar(list, fi, n, m - *f);
        tmp = 0;
        while (f != e) {
            sum = *f + *e;
            if (sum > m)
                ++f;
            else {
                if (sum > tmp) tmp = sum;
                --e;
            }
        }
        pi(tmp);
        putchar('\n');
    }
    return 0;
}

