#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef   long long int ll;
typedef long double db;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template <typename T>
using ordered_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define pll pair<ll,ll>
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define ub(v,val) upper_bound(v.begin(),v.end(),val)
#define np(str) next_permutation(str.begin(),str.end())
#define lb(v,val) lower_bound(v.begin(),v.end(),val)
#define sortv(vec) sort(vec.begin(),vec.end())
#define rev(p) reverse(p.begin(),p.end());
#define v vector
#define len length()
#define repc(i,s,e) for(ll i=s;i<e;i++)
#define fi first
#define se second
#define mset(a,val) memset(a,val,sizeof(a));
#define mt make_tuple
#define repr(i,n) for(i=n-1;i>=0;i--)
#define rep(i,n) for(i=0;i<n;i++)
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define at(s,pos) *(s.find_by_order(pos))
#define set_ind(s,val) s.order_of_key(val)
long long int M = 1e9 + 7 ;
long long int inf = 9 * 1e18;
const double PI = acos(-1);
//CLOCK
ll begtime = clock();
#define time() cout << "\n\nTime elapsed: " << (clock() - begtime)*1000/CLOCKS_PER_SEC << " ms\n\n";
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
//CLOCK ENDED
ll n, m;
// modular exponentiation
ll binpow(ll val, ll deg)
{
	if (deg < 0)
		return 0;
	if (!deg)
		return 1 % M;
	if (deg & 1)
		return binpow(val, deg - 1) * val % M;
	ll res = binpow(val, deg >> 1);
	return (res * res) % M;
}
//binomial
ll modinv(ll n) {
	return binpow(n, M - 2);
}
#define tll tuple<ll,ll,ll>
int main() {
	// your code goes here
	IOS;
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif

	ll i, j, t, k, x, y, z,  N;

	ll q;
	cin >> n >> q;
	vector<ll> vec;
	rep(i, n) {
		cin >> x;
		vec.pb(x);
	}
	vector<pll> query;
	rep(i, q) {
		cin >> x;
		query.pb({x, i});
	}
	vector<pll> out;

	sortv(query);

	ll last = 0;
	k = 0;
	j = 0;
	for (auto u : vec) {

		ll rem = u - last - 1;

		while (j < query.size()) {
			if (query[j].fi <= k + rem) {
				out.push_back({query[j].se, last + query[j].fi - k});
			}
			else break;
			j++;
		}
		last = u;
		k += rem;

	}
	while (j < query.size()) {

		out.push_back({query[j].se, last + query[j].fi - k});


		j++;
	}
	sortv(out);
	for (auto u : out) {
		cout << u.se << '\n';
	}


	return 0;

}



































#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define endl "\n"
template <class T> bool chmin(T& a, T b){ if(a > b){ a = b; return 1; } return 0; }
template <class T> bool chmax(T& a, T b){ if(a < b){ a = b; return 1; } return 0; }
#define MAX_LL 1000000000000000000
#define MAX_INT 1000000000
#define alfa "abcdefghijklmnopqrstuvwxyz"
#define pi 3.141592653589793
   // vector<> dp(100010,1000000000000000)
    using p = pair<int,int>;
    using graph = vector<vector<int>> ;
    int main () {
     int n,q;cin >> n >> q;
     vector<ll> v (n);
     for (ll &i : v)cin >> i;
     vector<ll> s (n+1);// 配列の間の個数うの合計
     s[0]=v[0]-1;
     for (int i = 1; i < n; i++) {
         s[i]=s[i-1]+(v[i]-v[i-1]-1);
     }
     //for (ll i:s)cout << i << endl;
     s[n]=MAX_LL*1.3;
     for (int i = 0; i < q; i++) {
         bool ok = 0;
         ll k;cin >> k;
         ll t=lower_bound(s.begin(),s.end(),k)-s.begin();
         if (t==n)cout << k-s[n-1]+v[n-1] << endl;
         else cout << v[t]-1-(s[t]-k) << endl;
     }
    }