#include<bits/stdc++.h>usingnamespacestd;vector<int>solve(vector<int>&p,intk){intn=p.size();for(inti=0;i<n;i++){p[i]--;}intavailable_group_id=0;map<int,vector<int>>group_elements;vector<int>group_id(n),eaten_at_round(n,-1);set<int>table;for(inti=0;i<n;i++){intx=p[i];autoitr=table.lower_bound(x);if(itr!=table.end()){intparent=*itr;table.erase(parent);table.insert(x);group_id[x]=group_id[parent];group_elements[group_id[x]].push_back(x);}else{// Create a new group
group_id[x]=available_group_id;group_elements[group_id[x]].push_back(x);table.insert(x);available_group_id++;}// Handling the deletion only inside the "if" block is incorrect, as
// k can also be equal to 1.
vector<int>&group_now=group_elements[group_id[x]];if((int)group_now.size()==k){for(int&ele:group_now){eaten_at_round[ele]=i+1;}// Make sure to do cleanup from table as well.
table.erase(x);}}returneaten_at_round;}intmain(){intn,k;cin>>n>>k;vector<int>p(n);for(inti=0;i<n;i++){cin>>p[i];}vector<int>res=solve(p,k);for(inti=0;i<n;i++){cout<<res[i]<<"\n";}}