#include<bits/stdc++.h>
int n,k,m;
class node{
public:
int l;
int r;
bool flag;
}a[100086];
int c[1000086];
int cnt;
int sum;
bool nsol;
std::pair<int,int>qwq[100086],awa[100086];
int point,pt;
int f[1000086];
int g[1000086];
int main(){
std::cin>>n>>k>>m;
for(int i=1;i<=m;i++){
std::cin>>a[i].l>>a[i].r>>a[i].flag;
if(not a[i].flag){
c[a[i].l]++;
c[a[i].r+1]--;
}
}
for(int i=1;i<=n;i++){
sum+=c[i];
if(not sum){
point++;
qwq[i]=std::make_pair(i,i);
}
}
if(point==k){
for(int i=1;i<=n;i++)
if(qwq[i].first)
std::cout<<qwq[i].first<<"\n";
exit(0);
}
qwq[n+1]=std::make_pair(n+1,0);
for(int i=1;i<=n;i++)
if(not qwq[i].second)
qwq[i].second=qwq[i-1].second;
for(int i=n;i;i--)
if(not qwq[i].first)
qwq[i].first=qwq[i+1].first;
for(int i=1;i<=m;i++)
if(a[i].flag and qwq[a[i].l].first<=qwq[a[i].r].second)
awa[++pt]=std::make_pair(qwq[a[i].l].first,qwq[a[i].r].second);
point=0;
std::sort(awa+1,awa+1+pt);
for(int i=1;i<=pt;i++){
while(point and awa[i].first>=qwq[point].first and awa[i].second<=qwq[point].second)
point--;
qwq[++point]=awa[i];
}
int lst=0;
for(int i=1;i<=point;i++)
if(qwq[i].second>lst){
lst=qwq[i].second;
f[i]=f[i-1]+1;
}
else
f[i]=f[i-1];
lst=n+1;
for(int i=point;i;i--)
if(qwq[i].first<lst){
lst=qwq[i].first;
g[i]=g[i+1]+1;
}
else
g[i]=g[i+1];
for(int i=1;i<=point;i++)
if(f[i]==f[i-1]+1){
if(qwq[i].first==qwq[i].second){
std::cout<<qwq[i].first<<"\n";
nsol=true;
}
int l=1;
int r=i-1;
int ans1=0;
int ans2=point-1;
#define mid ((l+r)>>1)
while(l<=r)
if(qwq[mid].second<=qwq[i].second){
ans1=mid;
l=mid+1;
}
else
r=mid-1;
l=i+1;
r=n;
while(l<=r)
if(qwq[mid].first>=qwq[i].second){
ans2=mid;
r=mid-1;
}
else
l=mid+1;
#undef mid
if(f[ans1]+g[ans2]>k){
std::cout<<qwq[i].second<<"\n";
nsol=true;
}
}
if(nsol);
else
puts("-1");
return 0;
}
this