#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1);
const int maxn = 1e6 + 10;
typedef struct p {
  int bh, v;
};
struct cmp {
  bool operator()(const p &a, const p &b) {
    if (a.v == b.v) return b.bh < a.bh;
    return b.v < a.v;
  }
};
priority_queue<p, vector<p>, cmp> pqc;
int f[maxn];
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    p s;
    s.bh = i;
    s.v = 0;
    pqc.push(s);
  }
  memset(f, 0, sizeof(f));
  for (int i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    f[x % m]++;
    p k;
    k.bh = x % m;
    k.v = f[x % m];
    pqc.push(k);
    while (!pqc.empty()) {
      p ss = pqc.top();
      if (f[ss.bh % m] == ss.v) {
        printf("%d\n", ss.v * m + ss.bh);
        break;
      } else {
        pqc.pop();
      }
    }
  }
  return 0;
}
