#include<bits/stdc++.h>
using namespace std;
const int N = 4e5+5;
int a[N];
vector<int> v[N];
bool vis[N];
set<int> s;
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i] < 0 && (-a[i]+i-1)/i < N){
v[(-a[i]+i-1)/i].push_back(i);
}else{
v[0].push_back(i);
}
}
for(auto x:v[0]){
s.insert(x);
}
for(int i=1;i<=m;i++){
for(auto x:v[i]){
s.insert(x);
}
for(auto j=s.begin();j!=s.end();j++){
if(1ll*a[*j] + 1ll**j * i >= 1ll*N){
s.erase(s.find(*j));
}else if(a[*j] + *j * i >= 0){
vis[a[*j] + *j * i] = true;
}
}
for(int j=0;;j++){
if(!vis[j]){
printf("%d\n",j);
break;
}
}
for(auto j=s.begin();j!=s.end();j++){
if(1ll*a[*j] + 1ll**j * i >= 1ll*N){
s.erase(s.find(*j));
}else if(a[*j] + *j * i >= 0){
vis[a[*j] + *j * i] = false;
}
}
}
}