#include <bits/stdc++.h>
using namespace std;

typedef unsigned long ul;
typedef unsigned long long ull;
typedef long long ll;
typedef vector<ll> vint;
typedef vector< vector<ll> > vvint;
typedef vector< vector< vector<ll> > > vvvint;
typedef vector<string> vstring;
typedef vector< vector<string> > vvstring;
typedef vector<char> vchar;
typedef vector< vector<char> > vvchar;
typedef vector<long double> vdouble;
typedef vector< vector<long double> > vvdouble;
typedef vector< vector< vector<long double> > > vvvdouble;
typedef pair<ll,ll> pint;
typedef vector<pint> vpint;
typedef vector<bool> vbool;

#define rep(i,n) for(ll i=0;i<n;i++)
#define repf(i,f,n) for(ll i=f;i<n;i++)
#define repr(i,n) for(ll i=n-1;i>=0;i--)
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define pf push_front
#define fi first
#define se second
#define ALL(obj) (obj).begin(), (obj).end()
// #define LLONG_MAX 9223372036854775806
#define MOD 1000000007
const double PI=3.14159265358979323846;
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
template<typename T> T Ceil(T a, T b){return (a+b-1)/b;}

int dy[]={0, 0, 1, -1, 1, -1, -1, 1};
int dx[]={1, -1, 0, 0, 1, 1, -1, -1};

void printv(vint &v){
    for(auto e:v) cout<<e<<" ";
        cout<<endl;
    }

int main() {
    cout<<fixed<<setprecision(10);

    ll N,Q; cin>>N>>Q;
    vint A(N); rep(i,N) scanf("%ld", &A[i]);
    vint X(Q); rep(i,Q) scanf("%ld", &X[i]);

    vint rui(N+1, 0);
    rep(i,N) rui[i+1] = rui[i] + A[i];
    vint rui_even(N+1, 0); // 偶数番目のみ
    rep(i,N){
        rui_even[i+1] = rui_even[i];
        if(i%2==0) rui_even[i+1] += A[i];
    }
    vint rui_odd(N+1, 0); // 奇数番目のみ
    rep(i,N){
        rui_odd[i+1] = rui_odd[i];
        if(i%2==1) rui_odd[i+1] += A[i];
    }


    auto get_sum = [&](ll l, ll r){
        if(r <= l) return 0;
        auto itl = lower_bound(ALL(A), l);
        auto itr = lower_bound(ALL(A), r);
        return (int)(itr - itl);
    };


    auto g = [&](ll x){
        auto isOK = [&](ll key){
            // true : 被らない
            ll n = (key+1)/2; // 高橋くんの操作回数
            ll m = key - n;  // 青木くんの操作回数
            ll a = A[N-n]; // 高橋くんが最後にとったカードに書いてある数
            // [x-(a-x), a) の間にあるカードの数がm以上であればよい
            ll num = get_sum(x - (a-x), a);
            return num >= m;
        };
        // 貪欲にとって行ったときに、一度も被らない最大のターン数
        ll l,r;
        l = 1; //絶対に被らない
        r = N+1; // 絶対にかぶる。カードはN枚しかないので
        while(r-l>1){
            ll mid = (l+r)/2;
            if(isOK(mid)) l = mid;
            else r = mid;
        }
        return l;
    };

    rep(i,Q){
        ll ans = 0;
        ll t = g(X[i]);
        // cout<<"x: "<<X[i]<<", t: "<<t<<endl;
        ans += rui[N] - rui[N-(t+1)/2]; // 上から(t+1)/2個取った時の和を加算
        // cout<<ans<<endl;
        // この時点で残っているのは下からN-t個
        // t%2 == 0 なら、次は高橋くんのターン
        // A[N-t-1], A[N-t-3], ...をとる
        // t%2 == 1　なら、
        // A[N-t-2], A[N-t-4], ...をとる
        // N-t-1-(t%2) がeven => rui_even, otherwise => rui_odd

        if(t%2==1) t++;
        ll num = N-t-1;
        if(num%2 == 0){
            ans += rui_even[max(0ll, num+1)];
        }else{
            ans += rui_odd[max(0ll, num+1)];
        }

        // cout<<ans<<endl;
        printf("%ld\n", ans);
    }


    return 0;

}

Measured memory_bytes: 5632