#ifdef LOCAL111
	#define _GLIBCXX_DEBUG
#else
	#define NDEBUG
#endif
#define _USE_MATH_DEFINES
#include <bits/stdc++.h>
const int INF = 1e9;
using namespace std;
template<typename T, typename U> ostream& operator<< (ostream& os, const pair<T,U>& p) { os << '(' << p.first << ' ' << p.second << ')'; return os; }

#define endl '\n'
#define ALL(a)  (a).begin(),(a).end()
#define SZ(a) int((a).size())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define RFOR(i,a,b) for (int i=(b)-1;i>=(a);i--)
#define REP(i,n)  FOR(i,0,n)
#define RREP(i,n) for (int i=(n)-1;i>=0;i--)
#ifdef LOCAL111
	#define DEBUG(x) cout<<#x<<": "<<(x)<<endl
	template<typename T> void dpite(T a, T b){ for(T ite = a; ite != b; ite++) cout << (ite == a ? "" : " ") << *ite; cout << endl;}
#else
	#define DEBUG(x) true
	template<typename T> void dpite(T a, T b){ return; }
#endif
#define F first
#define S second
#define SNP string::npos
#define WRC(hoge) cout << "Case #" << (hoge)+1 << ": "
template<typename T> void pite(T a, T b){ for(T ite = a; ite != b; ite++) cout << (ite == a ? "" : " ") << *ite; cout << endl;}
template<typename T> bool chmax(T& a, T b){if(a < b){a = b; return true;} return false;}
template<typename T> bool chmin(T& a, T b){if(a > b){a = b; return true;} return false;}

typedef long long int LL;
typedef unsigned long long ULL;
typedef pair<int,int> P;

void ios_init(){
	//cout.setf(ios::fixed);
	//cout.precision(12);
#ifdef LOCAL111
	return;
#endif
	ios::sync_with_stdio(false); cin.tie(0);
}

template<typename T>
class BIT{
public:
	int n;
	vector<T> dat;
	T init;
public:
	BIT(int x){
		n = x;
		init = 0; //書き換えする
		dat = vector<T>(n+1);
		for(int i = 0; i < n+1; i++){
			dat[i] = init;
		}
		return;
	}

	inline T func(T x, T y){
		return x + y; //書き換えする
	}

	T query(int i){ //[0,i)へのクエリ
		T s = 0;
		while(i > 0){
			s = func(s, dat[i]);
			i -= i&-i;
		}
		return s;
	}

	void add(int i, T x){
		i++;
		while(i <= n){
			dat[i] = func(dat[i],x);
			i += i & -i;
		}
	}
};


int main()
{
	ios_init();
	int n, q;
	while(cin >> n >> q) {
		vector<LL> s(n);
		vector<LL> t(n);
		vector<LL> x(n);
		REP(i, n) {
			cin >> s[i] >> t[i] >> x[i];
			s[i] -= x[i];
			t[i] -= x[i];
		}
		vector<LL> d(q);
		REP(i, q) cin >> d[i];
		
		vector<int> za(n);
		REP(i, n) {
			za[i] = x[i];
		}
		sort(ALL(za));
		za.erase(std::unique(za.begin(), za.end()), za.end());
		// REP(i, n) x[i] = lower_bound(ALL(za), x[i]) - za.begin();

		using P = pair<LL, LL>;
		LL INF = 1000000000000000LL;
		vector<P> qu;
		REP(i, n) {
			DEBUG(s[i]); DEBUG(t[i]);
			qu.emplace_back(s[i], x[i]);
			qu.emplace_back(t[i], -x[i]);
		}
		REP(i, q) {
			qu.emplace_back(d[i], INF);
		}
		sort(ALL(qu));
		dpite(ALL(qu));

		// BIT<int> bit(SZ(za));
		multiset<int> se;
		vector<int> ans;
		REP(i, SZ(qu)) {
			DEBUG(i);
			DEBUG(qu[i]);
			// DEBUG(i);
			if(qu[i].S == INF) {
				// DEBUG(i); dpite(ALL(bit.dat));
				// int l = 0;
				// int r = SZ(za);
				// if(bit.query(r) == 0) {
				// 	l = n;
				// } else {
				// 	while(l + 1 < r) {
				// 		int m = (l+r) / 2;
				// 		if(bit.query(m) == 0) {
				// 			l = m;
				// 		} else {
				// 			r = m;
				// 		}
				// 	}

				// }
				// if(l == n) {
				// 	ans.push_back(-1);
				// } else {
				// 	ans.push_back(x[l]);
				// }
				if(se.empty()) {
					ans.push_back(-1);
				} else {
					ans.push_back(*se.begin());
				}
			} else {
				if(qu[i].S < 0) {
					// int idx = lower_bound(ALL(za), -qu[i].S) - za.begin();
					// DEBUG(idx);
					// bit.add(idx, -1);
					se.erase(-qu[i].S);
				} else {
					// int idx = lower_bound(ALL(za), qu[i].S) - za.begin();
					// bit.add(idx, 1);
					se.insert(qu[i].S);
				}
			}
			// REP(i, SZ(za)+1) {
			// 	DEBUG(bit.query(i));
			// }
		}
		REP(i, SZ(ans)) {
			cout << ans[i] << endl;
		}
	}
	return 0;
}


Measured memory_bytes: 29796