#include <bits/stdc++.h>
using namespace std;
#define Rep(i,n) for(int i=0;i<(int)(n);i++)
#define For(i,n1,n2) for(int i=(int)(n1);i<(int)(n2);i++)
#define REP(i,n) for(ll i=0;i<(ll)(n);i++)
#define RREP(i,n) for(ll i=((ll)(n)-1);i>=0;i--)
#define FOR(i,n1,n2) for(ll i=(ll)(n1);i<(ll)(n2);i++)
#define RFOR(i,n1,n2) for(ll i=((ll)(n1)-1);i>=(ll)(n2);i--)
#define all(a)  (a).begin(),(a).end()
#define SORT(a) sort((a).begin(),(a).end())
#define oorret 0
#define oor(x) [&](){try{x;} catch(const out_of_range& oor){return oorret;} return x;}()
#define IOS cin.tie(0),ios::sync_with_stdio(false)
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> P;
template<typename T1, typename T2> inline bool chmin(T1& a, T2 b) { if (a > b) { a = b; return 1; }return 0; }
template<typename T1, typename T2> inline bool chmax(T1& a, T2 b) { if (a < b) { a = b; return 1; }return 0; }
template<class Type>struct is_vector : std::false_type {};
template<class ValueType, class Alloc>struct is_vector<std::vector<ValueType, Alloc>> : std::true_type {};
template <typename T> inline ostream& operator << (ostream& out, const vector<T>& v) {
	if (v.empty())return out;
	constexpr bool is_vector_v = is_vector<T>::value;
	if (is_vector_v)for (auto itr = v.begin(); itr != v.end();)out << (*itr), out << ((++itr != v.end()) ? "\n" : "");
	else for (auto itr = v.begin(); itr != v.end();)out << (*itr), out << ((++itr != v.end()) ? " " : "");
	return out;
}
inline void put() {}
template<class T> inline void put(const T& first) { std::cout << first << "\n"; }
template<class T, class... N> inline void put(const T& first, const N& ... rest) { std::cout << first << " "; put(rest...); }
inline void putn() {}
template<class T, class... N> inline void putn(const T& first, const N& ... rest) { std::cout << first << "\n"; putn(rest...); }

template<typename T>
vector<int> Coordinate_compression(vector<T>& a) {
	int n = a.size();
	map<T, int> mp;
	Rep(i, n) {
		mp[a[i]] = 0;
	}
	int cnt = 0;
	for (auto v : mp) {
		mp[v.first] = cnt++;
	}
	vector<int> res(n);
	REP(i, n) {
		res[i] = mp[a[i]];
	}
	return res;
}

int main() {
	IOS;
	int n, q;
	cin >> n >> q;
	vector<int> s(n), t(n), x(n), d(q), cs(n), ct(n), cd(q);
	REP(i, n) {
		cin >> s[i] >> t[i] >> x[i];
		s[i] = max(0, s[i] - x[i]);
		t[i] = max(0, t[i] - x[i]);
	}
	REP(i, q) {
		cin >> d[i];
	}
	map<int, int> mp;
	REP(i, n) {
		mp[s[i]] = 0;
		mp[t[i]] = 0;
	}
	REP(i, q) {
		mp[d[i]] = 0;
	}
	int cnt = 0;
	for (auto v : mp) {
		mp[v.first] = cnt++;
	}
	REP(i, n) {
		cs[i] = mp[s[i]];
		ct[i] = mp[t[i]];
	}
	REP(i, q) {
		cd[i] = mp[d[i]];
	}
	vector<int> table(cnt ,INT_MAX);
	using pi = pair<P, int>;
	vector<pi> p(n);
	REP(i, n) {
		p[i] = pi(P(cs[i], ct[i]), x[i]);
	}
	sort(all(p));
	int cnt2 = 0;
	priority_queue<P, vector<P>, greater<P>> pq;
	REP(i, cnt) {
		while (cnt2 < n && i == p[cnt2].first.first) {
			pq.push(P(p[cnt2].second, p[cnt2].first.second));
			cnt2++;
		}
		P pt;
		pt.second = -1;
		while (!pq.empty()) {
			if (pq.top().second <= i) {
				pq.pop();
			} else {
				pt = pq.top();
				break;
			}
		}
		if (pt.second >= 0) {
			chmin(table[i], pt.first);
		}
	}
	REP(i, q) {
		if (table[cd[i]] == INT_MAX) {
			put(-1);
		} else {
			put(table[cd[i]]);
		}
	}
	return 0;
}


Measured memory_bytes: 45424