#include <bits/stdc++.h>
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
#define ll long long
#define el "\n"
#define fi first
#define se second
#define _ROOT_ int main()
#define M 1000000007
#define MAXN 1000001
#define INF (1ll<<30)
#define NAME "file"
#define debug(a) cout << #a << " = " << a << endl;
using namespace std;

ll n, m, q, scc, on ;
ll a[MAXN] ;
ll res[MAXN ] ;
ll lab[MAXN ] ;
pair<ll,ll> que[MAXN ] ;
pair<ll,ll> pos[MAXN ] ;
bool active[MAXN ] ;


ll find_set(ll a ) {
    return lab[a] < 0 ? a : lab[a] = find_set(lab[a]) ;
}
bool union_set(ll a, ll b ) {
    if(!active[a]) return false ;
    if(!active[b]) return false ;
    a = find_set(a) ;
    b = find_set(b) ;
    if(a == b ) return false ;
    if(lab[a] > lab[b]) swap(a, b ) ;
    lab[a] += lab[b] ;
    lab[b] = a ;
    scc -- ;
    return true ;
}

void init() {
    cin >> n >> q ;
    FOR(i, 1, n ) cin >> pos[i].fi, pos[i].se = i ;
    FOR(i , 1 , q ) cin >> que[i].fi , que[i].se = i ;
}

void solve() {
    memset(lab, - 1, sizeof lab ) ;

    sort(pos + 1, pos + n + 1 , greater<>()  ) ;
    sort(que + 1, que + q + 1 , greater<>()  ) ;
    ll l = 1 ;
    FOR(i, 1, q ) {
        ll w = que[i].fi, id = que[i].se ;
        while(l <= n && pos[l].fi > w ) {
            on ++ ;
            ll p = pos[l].se ;
            active[p] = true ;
            union_set(p + 1 , p ) ;
            union_set(p - 1 , p ) ;
            l ++ ;
        }
//        debug(on) ;
//        debug(scc) ;
        res[id] = on + scc ;
    }

    FOR(i, 1, q ) cout << res[i] << el ;
}

_ROOT_ {
    // freopen(NAME".inp" , "r" , stdin);
    // freopen(NAME".out" , "w", stdout) ;
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t = 1; // cin >> t ;
    while(t--) {
        init();
        solve();
    }
    return (0&0);
}
