#include using namespace std; #define int long long #define rep(i,n) for(int i=0;i<(n);i++) #define pb push_back #define all(v) (v).begin(),(v).end() #define fi first #define se second typedef vectorvint; typedef pairpint; typedef vectorvpint; templateinline void chmin(A &a,B b){if(a>b)a=b;} templateinline void chmax(A &a,B b){if(adat; BinaryIndexedTree(int n=0):n(n){ dat.resize(n+1); } void add(int k,int x){ for(k++;k<=n;k+=k&-k)dat[k]+=x; } int sum(int k){ int ret=0; for(k++;k;k-=k&-k)ret+=dat[k]; return ret; } }; int N,M; int X[111111],A[111111],B[111111]; vint idx[222222]; signed main(){ cin>>N>>M; rep(i,N){ cin>>X[i]>>A[i]>>B[i]; idx[A[i]].pb(i); } int cnt=0; BinaryIndexedTree bit1(222222),bit2(222222); rep(i,N){ if(X[i]==3)cnt++; else if(X[i]==2)bit2.add(B[i],1); else if(X[i]==1)bit1.add(B[i],1); } int ans=LLONG_MAX; for(int i=100001;i>=0;i--){ for(auto w:idx[i]){ if(X[w]==2){ bit2.add(B[w],-1); cnt++; } else if(X[w]==1){ bit1.add(B[w],-1); bit2.add(B[w],1); } else if(X[w]==0){ bit1.add(B[w],1); } } int lb=-1,ub=100010; while(ub-lb>1){ int mid=(ub+lb)/2; int tmp=cnt+bit2.sum(200000)+bit1.sum(200000)-bit1.sum(mid-1); if(tmp>=M)lb=mid; else ub=mid; } if(lb==-1)continue; int tmp=cnt+bit2.sum(200000)-bit2.sum(lb-1); chmin(ans,tmp); } cout<