#include <iostream>
#include <vector>
#include <bits/stdc++.h>
#include <algorithm>
#include <iterator>

#define ll long long

using namespace std;

int main() {
  int N, Q;
  cin >> N >> Q;

  vector<int> A(N);
  vector<int> B(Q);
  for(int i=0; i<N; i++)
    cin >> A[i];

  for(int i=0; i<Q; i++)
    cin >> B[i];



  // Sortiranje A
  sort(A.begin(), A.end());


  // Radnja
  // NAPOMENA: proveri da li je dobra formula za medijanu !!!
  for(int i=0; i<Q; i++) {
    int br=0;
    int curr_med = A[(N/2-1)+1];
    int target = B[i];

    if (curr_med == target) {
      cout << br << endl;
      continue;
    } else {
      // sporo
      int pos = distance(A.begin(), find(begin(A), end(A), target)); // ovo nalazi poziciju glasa ako ga ima u nizu

      if (pos != N) {
        // postoji glas vec
        int pre = pos;
        int posle = N-1-pos;

        if (pre > posle) {
          br = pre-posle-1;
        } else if (posle > pre) {
          br = posle-pre;
        }
        // cout << pre << " " << posle << endl;
      } else {
        // ne postoji glas u A
        int low = distance(A.begin(), lower_bound(A.begin(), A.end(), target));
        br++; // ovde dodajemo jedan br uvek, zato sto nema tog glasa koga trazimo u listi, tako da je neophodno da se doda

        if (low == N) { // ako je target najveci broj, a nema ga u vectoru
          br += N-1;
        } else { // ako target se ne nalazi u vectoru, i nije na kraju
          int pre = low;
          int posle = N-low;
          // ovde nije `N-1` zato sto `N` je za 1 vece zbog dodavanja tog glasa
          // koji nedostaje (target)

          if (pre > posle) {
            br += pre-posle-1;
          } else if (posle > pre) {
            br += posle-pre;
          }
        }

        // cout << "LOW: " << low << endl;
      }
    }
    cout << br << endl;
  }

  return 0;
}