#include <bits/stdc++.h>
#define rep(i,n)for(long long i=0;i<(long long)(n);++i)
#define all(a) a.begin(), a.end()
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> P;
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
 
const int MOD=1e9+7;
const ll INF=1e18;
const int MAX=510000;
const double pi=acos(-1);
int dx[8] = {1,0,-1,0,1,1,-1,-1};
int dy[8] = {0,1,0,-1,-1,1,1,-1};

int main(){
  cin.tie(0);
  ios::sync_with_stdio(false); 
  
  int n,q;
  cin >> n >> q;
  vector<tuple<int,int,int>> stx(n);
  rep(i,n){
    cin >> get<1>(stx[i]) >> get<2>(stx[i]) >> get<0>(stx[i]);
  }
  sort(stx.begin(),stx.end());
  
  set<P> st;
  rep(i,q){
    int x;
    cin >> x;
    st.emplace(x,i);
  }
  
  vector<int> ans(q,-1);
  rep(i,n){
    int s = get<1>(stx[i]);
    int t = get<2>(stx[i]);
    int x = get<0>(stx[i]);
    //xの昇順で考えてぶつかったら，その人をerase
    auto first = st.lower_bound(P(s-x,0));//引っかかる人
    auto end = st.upper_bound(P(t-x-1,q));//引っかからない人
    
    for(auto it = first; it !=end; ++it) ans[it->second] = x;
    
    st.erase(first,end);
  }
  
  rep(i,q) cout << ans[i] << endl;
  return 0;
}

#include <bits/stdc++.h>
using namespace std;

// 型定義
typedef long long ll;
typedef pair<ll, ll> P;

// forループ
#define REP(i,n) for(ll i=0; i<(ll)(n); ++i)

// 定数宣言
const int INF = 1e9;
const int MOD = 1e9+7;
const ll LINF = 1e18;

// グラフ表現
using Graph = vector<vector<int>>;

// グラフの辺表現
using Edge = map<pair<int,int>,int>;

// n次元配列の初期化。第２引数の型のサイズごとに初期化していく。
template<typename A, size_t N, typename T>
void Fill(A (&array)[N], const T &val){
    std::fill( (T*)array, (T*)(array+N), val );
}

bool compare_by_a(tuple<ll, ll, ll> a, tuple<ll, ll, ll> b) {
    if(get<0>(a) != get<0>(b)){
        return get<0>(a) > get<0>(b);
    }else{
        return get<1>(a) > get<1>(b);
    }
}
int main()
{
    cout << fixed << setprecision(15);
    ll N, Q;
    cin >> N >> Q;

    vector<tuple<ll, ll, ll> > A(N);

    REP(i ,N){
        ll s, t, x;

        cin >> s;
        cin >> t;
        cin >> x;

        get<0>(A[i]) = x;
        get<1>(A[i]) = s;
        get<2>(A[i]) = t;
    }

    vector<ll> D(Q);
    REP(i, Q){
        cin >> D[i];
    }

    // 1つ目のキーで降順順ソート
    sort(A.begin(), A.end(), compare_by_a);

    // for(ll i=0; i<N; i++){
    //     cout << get<0>(A[i]) << " " << get<1>(A[i]) << " " << get<2>(A[i]) << endl;
    // }
    vector<queue<ll>> plus(Q+1);
    vector<queue<ll>> minus(Q+1);

    REP(i, N){
        ll start = get<1>(A[i]) - get<0>(A[i]);
        ll end = get<2>(A[i]) - get<0>(A[i]);

        start = max(0LL, start);
        end = max(0LL, end);

        auto Iter1 = lower_bound(D.begin(), D.end(), start);
        ll s_id = Iter1 - D.begin();

        auto Iter2 = lower_bound(D.begin(), D.end(), end);
        ll t_id = Iter2 - D.begin();

        // cout << "s_id: " << s_id << "t_id: " << t_id << endl;

        plus[s_id].push(get<0>(A[i]));
        minus[t_id].push(get<0>(A[i]));
        // for(ll j=max(0LL,s_id); j<min(Q, t_id); j++){
        //     ans[j] = get<0>(A[i]);
        // }
    }

    // cout << 2 << endl;
    // cout << 2 << endl;
    // cout << 10 << endl;
    // cout << -1 << endl;
    // cout << 13<< endl;
    // cout << -1 << endl;
    multiset<ll> ans;

    REP(i, Q){
        // cout << i << " : " << ans.size() << endl;
        //　候補のものをすべて入れる。
        while (!(plus[i].empty())) {
            ans.insert(plus[i].front());
            plus[i].pop();
        }

        // cout << "plusの後： ";
        // for(auto itr = ans.begin(); itr != ans.end(); ++itr) {
        //     cout << *itr << " ";
        // }
        // cout << endl;

        //　候補が終わったものを削除
        while (!(minus[i].empty())) {
            ll temp = minus[i].front();
            auto itr = ans.find(temp);
            if(itr != ans.end()){
                ans.erase(ans.find(temp));
            }
            // cout << *itr << endl;
            minus[i].pop();
        }
        // cout << "minusの後： ";
        // for(auto itr = ans.begin(); itr != ans.end(); ++itr) {
        //     cout << *itr << " ";
        // }
        // cout << endl;

        // 候補がないなら-1を出力
        if(ans.empty()){
            cout << -1 << endl;
        }
        else{
            auto itr = ans.begin();
            cout << *itr << endl;
        }
    }

    return 0;
}