//#pragma comment(linker,"/STACK:102400000,102400000") #include #include #include #include #include #include #include #include #include #include #define ll long long #define db double #define PB push_back #define lson k<<1 #define rson k<<1|1 using namespace std; const int N = 50005; struct Tree { int h, id; int res; } tr[N], Q[N]; bool cmp_h(const Tree &a, const Tree &b) { return a.h < b.h; } bool cmp_id(const Tree &a, const Tree &b) { return a.id < b.id; } bool mk[N]; int main() { #ifdef PKWV freopen("C.in", "r", stdin); #endif // PKWV int n, q; while(scanf("%d%d", &n, &q) + 1) { for(int i = 0; i < n; i++) { scanf("%d", &tr[i].h); tr[i].id = i; } for(int i = 0; i < q; i++) { scanf("%d", &Q[i].h); Q[i].id = i; } sort(tr, tr + n, cmp_h); sort(Q, Q + q, cmp_h); for(int i = 0; i < n; i++) mk[i] = true; int j(0), blk(1); for(int i = 0; i < q; i++) { while(j < n && tr[j].h <= Q[i].h) { int id = tr[j].id; if((id > 0 && mk[id - 1]) && (id < n - 1 && mk[id + 1])) blk++; if(id == 0) { // printf("%d %d\n",id,!mk[id+1]); if(n == 1) blk--; else if(!mk[id + 1]) blk--; } else if(id == n - 1) { if(n == 1) blk--; else if(!mk[id - 1]) blk--; } else { if(!mk[id + 1] && !mk[id - 1]) blk--; } mk[id] = false; j++; } Q[i].res = blk; } sort(Q, Q + q, cmp_id); for(int i = 0; i < q; i++) printf("%d\n", Q[i].res); } return 0; }