#include<bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define int long long
using namespace std;
// struct ST{
// int n;
// vector<int> tree;
// ST(int sz){
// n = sz;
// tree.resize(4 * n);
// }
// void build(int node, int start, int end, vector<int>& T){
// if(start == end){
// tree[node] = T[start];
// }
// else{
// int mid = (start + end) / 2;
// build(2 * node, start, mid, T);
// build(2 * node + 1, mid + 1, end, T);
// tree[node] = max(tree[2 * node], tree[2 * node + 1]);
// }
// }
// int query(int node, int start, int end, int l, int r){
// if(start > r || end < l) return -inf;
// if(start >= l && end <= r) return tree[node];
// int mid = (start + end) / 2;
// int l1 = query(2 * node, start, mid, l, r);
// int r1 = query(2 * node + 1, mid + 1, end, l, r);
// return max(l1, r1);
// }
// int get(int node, int start, int end, int id){
// if(start == end){
// return tree[id];
// }
// else{
// int mid = (start + end) / 2;
// if(mid >= id){
// return get(2 * node, start, mid, id);
// }
// else{
// return get(2 * node + 1, mid + 1, end, id);
// }
// }
// }
// };
struct DSU{
int n;
vector<int> p;
vector<int> sz;
DSU(int size){
n = size;
p.resize(n + 1);
sz.resize(n + 1);
for(int i = 0; i <= n; i++){
p[i] = i;
sz[i] = 1;
}
}
int find(int u){
if(u == p[u]) return u;
return p[u] = find(p[u]);
}
void unite(int u, int v){
int a = find(u);
int b = find(v);
if(a != b){
if(sz[a] < sz[b]) swap(a, b);
p[b] = a;
sz[a] += sz[b];
}
}
int fi(int u){
int v = find(u);
int a = sz[v];
return (a * (a - 1)) / 2;
}
};
signed main(){
int n, m;
cin >> n >> m;
vector<int> a(n);
vector<pair<int, int>> q(m);
for(int i = 0; i < n; i++){
cin >> a[i];
}
for(int i = 0; i < m; i++){
cin >> q[i].ff;
q[i].ss = i;
}
vector<int> B = a;
sort(B.begin(), B.end());
sort(q.begin(), q.end());
vector<pair<int, int>> d;
for(int i = 0; i < n - 1; i++){
d.push_back({max(a[i], a[i + 1]), i});
}
DSU dsu(n + 1);
int cur = 0;
int idx = 0;
sort(d.begin(), d.end());
vector<int> t(m);
for(int i = 0; i < m; i++){
while(idx < n - 1 && d[idx].ff <= q[i].ff){
int id = d[idx].ss;
cur -= dsu.fi(id);
cur -= dsu.fi(id + 1);
dsu.unite(id, id + 1);
cur += dsu.fi(id);
idx += 1;
}
int nm = upper_bound(B.begin(), B.end(), q[i].ff) - B.begin();
t[q[i].ss] = cur + nm;
}
for(int i = 0; i < m; i++){
cout << t[i] << endl;
}
// for(auto t : d){
// cout << t.ff << " " << t.ss;
// cout << endl;
// }
}