#include <bits/stdc++.h>
using namespace std;
long long int mi(long long int n, long long int m) {
  long long int pw = n % m;
  long long int ex = m - 2;
  long long int ans = 1;
  while (ex) {
    if (ex & 1) ans = ans * pw % m;
    pw = pw * pw % m;
    ex >>= 1;
  }
  return ans % 1000000007;
}
long long int pw(long long int a, long long int n) {
  long long int pw = a % 1000000007;
  long long int ex = n;
  long long int ans = 1;
  while (ex) {
    if (ex & 1) ans = ans * pw % 1000000007;
    pw = pw * pw % 1000000007;
    ex >>= 1;
  }
  return ans % 1000000007;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
  for (T &t : v) is >> t;
  return is;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  for (const T &t : v) {
    os << t << " ";
  }
  os << '\n';
  return os;
}
void show(long long int x) { cout << x << " "; }
long long int gcd(long long int a, long long int b) {
  return b == 0 ? a : gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return a / gcd(a, b) * b;
}
long long int max(long long int a, long long int b) { return a > b ? a : b; }
long long int min(long long int a, long long int b) { return a < b ? a : b; }
long long int Abs(long long int x) { return x > 0 ? x : (-x); }
long long int Ceil(long long int a, long long int b) {
  return a / b + (a % b != 0);
}
void solve() {
  int q, x;
  cin >> q >> x;
  vector<long long int> cnt(x);
  set<pair<int, int>> st;
  for (int i = 0; i < x; i++) st.insert(make_pair(0, i));
  while (q--) {
    int e;
    cin >> e;
    e %= x;
    st.erase(make_pair(cnt[e], e));
    cnt[e]++;
    st.insert(make_pair(cnt[e], e));
    pair<int, int> p = *st.begin();
    int ct = p.first;
    int val = p.second;
    cout << (ct * x) + val << "\n";
  }
}
int32_t main() {
  int t = 1;
  while (t--) {
    solve();
  }
}
