//解説に倣ってイベントソート
#include<bits/stdc++.h>
using namespace std;

void happen(int flag, int x, set<int> &s){
  if(flag==1) s.insert(x);
  else if(flag==-1) s.erase(x);
}

int main(){
  int n,q;
  cin>> n >> q;
  vector<vector<int>> event(2*n,vector<int>(3));
  vector<int> d(q);
  for(int i=0; i<n; i++){
    int s,t,x;
    cin>> s >> t >> x;
    event[i]={s-x,1,x};
    event[i+n]={t-x,-1,x};
  }
  for(int i=0; i<q; i++) cin>> d[i];
  
  sort(event.begin(),event.end());
  auto itr=event.begin();
  set<int> close;
  for(auto t:d){ //dはもともとソート済み
    while(itr!=event.end() && (*itr)[0]<=t){
      happen((*itr)[1],(*itr)[2],close);
      itr++;
    }
    if(close.empty()) cout<< -1 <<endl;
    else cout<< *close.begin() <<endl;
  }
}
//自力とかむり