#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
const int N=4e5+7;
const int M=2e5;
int n,m,cnt;
struct node{
int flag,id,x1,x2,s;
}q[N],q1[N],q2[N];
int x[N],y[N],ss[N];
int ans[N];
int tr[N];
void add(int p,int sum){
for(;p<=M;p+=p&-p) tr[p]+=sum;
}
int query(int p){
int ans=0;
for(;p;p-=p&-p) ans+=tr[p];
return ans;
}
void Work(int l,int r,int L,int R){
if(l>r) return;
if(L==R){
for(int i=l;i<=r;i++) if(q[i].flag) ans[L]++;
return;
}
int mid=(L+R)>>1,p1=0,p2=0;
for(int i=l;i<=r;i++){
if(!q[i].flag){
if(q[i].id<=mid) q1[++p1]=q[i],add(q[i].s,1);
else q2[++p2]=q[i];
}
else{
int sum=query(q[i].x2)-query(q[i].x1-1);
if(q[i].s<=sum) q1[++p1]=q[i];
else q[i].s-=sum,q2[++p2]=q[i];
}
}
Sleep(1000);
for(int i=1;i<=p1;i++) if(!q1[i].flag) add(q1[i].s,-1);
for(int i=1;i<=p1;i++) q[l+i-1]=q1[i];
for(int i=1;i<=p2;i++) q[l+p1+i-1]=q2[i];
Work(l,l+p1-1,L,mid);
Work(l+p1,r,mid,R);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>x[i]>>y[i]>>ss[i];
for(int i=1,li;i<=m;i++){
cin>>li;
q[++cnt]={0,i,0,0,li};
}
for(int i=1;i<=n;i++) q[++cnt]={1,i,x[i],y[i],ss[i]};
Work(1,cnt,1,m+1);
for(int i=1;i<=m;i++) cout<<ans[i];
return 0;
}