def getN():
    return int(input())
def getNM():
    return map(int, input().split())
def getList():
    return list(map(int, input().split()))
def getArray(intn):
    return [int(input()) for i in range(intn)]
def input():
    return sys.stdin.readline().rstrip()
def rand_N(ran1, ran2):
    return random.randint(ran1, ran2)
def rand_List(ran1, ran2, rantime):
    return [random.randint(ran1, ran2) for i in range(rantime)]
def rand_ints_nodup(ran1, ran2, rantime):
  ns = []
  while len(ns) < rantime:
    n = random.randint(ran1, ran2)
    if not n in ns:
      ns.append(n)
  return sorted(ns)

def rand_query(ran1, ran2, rantime):
  r_query = []
  while len(r_query) < rantime:
    n_q = rand_ints_nodup(ran1, ran2, 2)
    if not n_q in r_query:
      r_query.append(n_q)
  return sorted(r_query)

from collections import defaultdict, deque, Counter
from sys import exit
from decimal import *
import heapq
import math
from fractions import gcd
import random
import string
import copy
from itertools import combinations, permutations, product
from operator import mul, itemgetter
from functools import reduce
from bisect import bisect_left, bisect_right

import sys
sys.setrecursionlimit(1000000000)
mod = 10 ** 9 + 7

#############
# Main Code #
#############

# 各queryについてO(n)で答える
# 問題を言い換えると　　

# 地点Xに到着するのは時間 Di + Xの時
# S <= Di + X < Tとなる[S, T, N]がなければ通過できる
# SについてXの早い順にソートする

# 各Dについて、どのSまで通過できるかを各O(1)で答える？

N,Q = getNM()
# taskに
# 0:通行止め時間帯のスタート
# 1:通行止め時間帯のゴール
# 2:人
# を入れ、全部まとめて処理する
task = []

STX = [getList() for _ in range(N)]
for s, t, x in STX:
    task.append((t - x, 0, x)) # xで止まらなくなる
    task.append((s - x, 1, x)) # xで止まる

for i in range(Q):
    d = getN()
    task.append((d, 2, i)) # 止まる位置を答える
answer = [-1] * Q

task.sort()

# 引っかかってる場所の管理
se = set()
se_hp = [] # heapで最小値を先頭に保つ
heapq.heapify(se_hp)

# 小さい時刻から順に見ていく
# 人ciについてどの範囲cjの範囲内に入っているか
for a, b, c in task:
    # ゴール位置についての情報なら
    if b == 0:
        # そのゴールに対応するスタート位置を取り除く
        se.remove(c)
    # スタートについての情報なら
    elif b == 1:
        # スタート位置を追加する
        se.add(c)
        # スタート位置の最小値候補に入れる
        heapq.heappush(se_hp, c)
    # 人についての情報なら
    else:
        # se_hpの最小値がseにない（用済みのものが残っている）間
        # またはse_hpを抜き切るまで
        while se_hp and se_hp[0] not in se:
            heapq.heappop(se_hp)
        if se_hp:
            answer[c] = se_hp[0]
        else:
            answer[c] = -1
    # (-3, 1, 10) 10のものについてスタートを追加
    # se:{10} se_hp:[10]
    # (-1, 1, 2) 2のものについてスタートを追加
    # se:{10, 2} se_hp:[2, 10]
    # (0, 2, 0) 人0について調べる
    # se:{10, 2} se_hp[2, 10]
    # (1, 0, 2) 2のものについてゴールが来たのでスタート位置を取り除く
    # se:{10} se_hp:[2, 10] se_hpに余計なものが残る
    # (1, 1, 2) 2のものについてスタート位置をまた追加
    # se:{10, 2} se_hp:[2, 10, 2]

for i in answer:
    print(i) def getN():
    return int(input()) getN return int(input()) int(input()) int input() input def getNM():
    return map(int, input().split()) getNM return map(int, input().split()) map(int, input().split()) map int input().split() ().split () input split def getList():
    return list(map(int, input().split())) getList return list(map(int, input().split())) list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split def getArray(intn):
    return [int(input()) for i in range(intn)] getArray int(input()) for i in range(intn) for i in range(intn) i range(intn) range intn for i in range(intn) int(input()) int input() input return [int(input()) for i in range(intn)] [int(input()) for i in range(intn)] intn intn def input():
    return sys.stdin.readline().rstrip() input return sys.stdin.readline().rstrip() sys.stdin.readline().rstrip() sys.stdin.readline().rstrip sys.stdin.readline() sys.stdin.readline sys.stdin sys stdin readline rstrip def rand_N(ran1, ran2):
    return random.randint(ran1, ran2) rand_N return random.randint(ran1, ran2) random.randint(ran1, ran2) random.randint random randint ran1 ran2 ran1 ran1 ran2 ran2 def rand_List(ran1, ran2, rantime):
    return [random.randint(ran1, ran2) for i in range(rantime)] rand_List random.randint(ran1, ran2) for i in range(rantime) for i in range(rantime) i range(rantime) range rantime for i in range(rantime) random.randint(ran1, ran2) random.randint random randint ran1 ran2 return [random.randint(ran1, ran2) for i in range(rantime)] [random.randint(ran1, ran2) for i in range(rantime)] ran1 ran1 ran2 ran2 rantime rantime def rand_ints_nodup(ran1, ran2, rantime):
  ns = []
  while len(ns) < rantime:
    n = random.randint(ran1, ran2)
    if not n in ns:
      ns.append(n)
  return sorted(ns) rand_ints_nodup ns = [] ns [] while len(ns) < rantime:
    n = random.randint(ran1, ran2)
    if not n in ns:
      ns.append(n)
   len(ns) < rantime len(ns) len ns rantime n = random.randint(ran1, ran2) n random.randint(ran1, ran2) random.randint random randint ran1 ran2 if not n in ns:
      ns.append(n)
   not n in ns n in ns n ns ns.append(n) ns.append ns append n return sorted(ns) sorted(ns) sorted ns ran1 ran1 ran2 ran2 rantime rantime def rand_query(ran1, ran2, rantime):
  r_query = []
  while len(r_query) < rantime:
    n_q = rand_ints_nodup(ran1, ran2, 2)
    if not n_q in r_query:
      r_query.append(n_q)
  return sorted(r_query) rand_query r_query = [] r_query [] while len(r_query) < rantime:
    n_q = rand_ints_nodup(ran1, ran2, 2)
    if not n_q in r_query:
      r_query.append(n_q)
   len(r_query) < rantime len(r_query) len r_query rantime n_q = rand_ints_nodup(ran1, ran2, 2) n_q rand_ints_nodup(ran1, ran2, 2) rand_ints_nodup ran1 ran2 2 if not n_q in r_query:
      r_query.append(n_q)
   not n_q in r_query n_q in r_query n_q r_query r_query.append(n_q) r_query.append r_query append n_q return sorted(r_query) sorted(r_query) sorted r_query ran1 ran1 ran2 ran2 rantime rantime from collections import defaultdict, deque, Counter from sys import exit from decimal import * import heapq heapq import math math from fractions import gcd import random random import string string import copy copy from itertools import combinations, permutations, product from operator import mul, itemgetter from functools import reduce from bisect import bisect_left, bisect_right import sys sys sys.setrecursionlimit(1000000000) sys.setrecursionlimit sys setrecursionlimit 1000000000 mod = 10 ** 9 + 7 mod 10 ** 9 + 7 10 ** 9 10 9 7 N,Q = getNM() N getNM() getNM Q task = [] task [] getList() for _ in range(N) for _ in range(N) _ range(N) range N for _ in range(N) getList() getList STX = [getList() for _ in range(N)] STX [getList() for _ in range(N)] for s, t, x in STX:
    task.append((t - x, 0, x)) # xで止まらなくなる
    task.append((s - x, 1, x)) # xで止まる s t x STX task.append((t - x, 0, x)) task.append task append (t - x, 0, x) t - x t x 0 x task.append((s - x, 1, x)) task.append task append (s - x, 1, x) s - x s x 1 x for i in range(Q):
    d = getN()
    task.append((d, 2, i)) # 止まる位置を答える i range(Q) range Q d = getN() d getN() getN task.append((d, 2, i)) task.append task append (d, 2, i) d 2 i answer = [-1] * Q answer [-1] * Q [-1] -1 Q task.sort() task.sort task sort se = set() se set() set se_hp = [] se_hp [] heapq.heapify(se_hp) heapq.heapify heapq heapify se_hp for a, b, c in task:
    # ゴール位置についての情報なら
    if b == 0:
        # そのゴールに対応するスタート位置を取り除く
        se.remove(c)
    # スタートについての情報なら
    elif b == 1:
        # スタート位置を追加する
        se.add(c)
        # スタート位置の最小値候補に入れる
        heapq.heappush(se_hp, c)
    # 人についての情報なら
    else:
        # se_hpの最小値がseにない（用済みのものが残っている）間
        # またはse_hpを抜き切るまで
        while se_hp and se_hp[0] not in se:
            heapq.heappop(se_hp)
        if se_hp:
            answer[c] = se_hp[0]
        else:
            answer[c] = -1
    # (-3, 1, 10) 10のものについてスタートを追加
    # se:{10} se_hp:[10]
    # (-1, 1, 2) 2のものについてスタートを追加
    # se:{10, 2} se_hp:[2, 10]
    # (0, 2, 0) 人0について調べる
    # se:{10, 2} se_hp[2, 10]
    # (1, 0, 2) 2のものについてゴールが来たのでスタート位置を取り除く
    # se:{10} se_hp:[2, 10] se_hpに余計なものが残る
    # (1, 1, 2) 2のものについてスタート位置をまた追加
    # se:{10, 2} se_hp:[2, 10, 2] a b c task if b == 0:
        # そのゴールに対応するスタート位置を取り除く
        se.remove(c)
    # スタートについての情報なら
    elif b == 1:
        # スタート位置を追加する
        se.add(c)
        # スタート位置の最小値候補に入れる
        heapq.heappush(se_hp, c)
    # 人についての情報なら
    else:
        # se_hpの最小値がseにない（用済みのものが残っている）間
        # またはse_hpを抜き切るまで
        while se_hp and se_hp[0] not in se:
            heapq.heappop(se_hp)
        if se_hp:
            answer[c] = se_hp[0]
        else:
            answer[c] = -1
    # (-3, 1, 10) 10のものについてスタートを追加
    # se:{10} se_hp:[10]
    # (-1, 1, 2) 2のものについてスタートを追加
    # se:{10, 2} se_hp:[2, 10]
    # (0, 2, 0) 人0について調べる
    # se:{10, 2} se_hp[2, 10]
    # (1, 0, 2) 2のものについてゴールが来たのでスタート位置を取り除く
    # se:{10} se_hp:[2, 10] se_hpに余計なものが残る
    # (1, 1, 2) 2のものについてスタート位置をまた追加
    # se:{10, 2} se_hp:[2, 10, 2] b == 0 b 0 se.remove(c) se.remove se remove c elif b == 1:
        # スタート位置を追加する
        se.add(c)
        # スタート位置の最小値候補に入れる
        heapq.heappush(se_hp, c)
    # 人についての情報なら
     b == 1 b 1 se.add(c) se.add se add c heapq.heappush(se_hp, c) heapq.heappush heapq heappush se_hp c while se_hp and se_hp[0] not in se:
            heapq.heappop(se_hp)
         se_hp and se_hp[0] not in se se_hp se_hp[0] not in se se_hp[0] se_hp 0 se heapq.heappop(se_hp) heapq.heappop heapq heappop se_hp if se_hp:
            answer[c] = se_hp[0]
        else:
            answer[c] = -1
    # (-3, 1, 10) 10のものについてスタートを追加
    # se:{10} se_hp:[10]
    # (-1, 1, 2) 2のものについてスタートを追加
    # se:{10, 2} se_hp:[2, 10]
    # (0, 2, 0) 人0について調べる
    # se:{10, 2} se_hp[2, 10]
    # (1, 0, 2) 2のものについてゴールが来たのでスタート位置を取り除く
    # se:{10} se_hp:[2, 10] se_hpに余計なものが残る
    # (1, 1, 2) 2のものについてスタート位置をまた追加
    # se:{10, 2} se_hp:[2, 10, 2] se_hp answer[c] = se_hp[0] answer[c] answer c se_hp[0] se_hp 0 answer[c] = -1 answer[c] answer c -1 for i in answer:
    print(i) i answer print(i) print i answer = [-1] * Q [-1] * Q answer def rand_ints_nodup(ran1, ran2, rantime):
  ns = []
  while len(ns) < rantime:
    n = random.randint(ran1, ran2)
    if not n in ns:
      ns.append(n)
  return sorted(ns) def rand_ints_nodup(ran1, ran2, rantime):
  ns = []
  while len(ns) < rantime:
    n = random.randint(ran1, ran2)
    if not n in ns:
      ns.append(n)
  return sorted(ns) rand_ints_nodup se_hp = [] [] se_hp mod = 10 ** 9 + 7 10 ** 9 + 7 mod def rand_N(ran1, ran2):
    return random.randint(ran1, ran2) def rand_N(ran1, ran2):
    return random.randint(ran1, ran2) rand_N Q = getNM() getNM() Q STX = [getList() for _ in range(N)] [getList() for _ in range(N)] STX se = set() set() se N,Q = getNM() getNM() N def getArray(intn):
    return [int(input()) for i in range(intn)] def getArray(intn):
    return [int(input()) for i in range(intn)] getArray def rand_List(ran1, ran2, rantime):
    return [random.randint(ran1, ran2) for i in range(rantime)] def rand_List(ran1, ran2, rantime):
    return [random.randint(ran1, ran2) for i in range(rantime)] rand_List def getN():
    return int(input()) def getN():
    return int(input()) getN def rand_query(ran1, ran2, rantime):
  r_query = []
  while len(r_query) < rantime:
    n_q = rand_ints_nodup(ran1, ran2, 2)
    if not n_q in r_query:
      r_query.append(n_q)
  return sorted(r_query) def rand_query(ran1, ran2, rantime):
  r_query = []
  while len(r_query) < rantime:
    n_q = rand_ints_nodup(ran1, ran2, 2)
    if not n_q in r_query:
      r_query.append(n_q)
  return sorted(r_query) rand_query def input():
    return sys.stdin.readline().rstrip() def input():
    return sys.stdin.readline().rstrip() input def getNM():
    return map(int, input().split()) def getNM():
    return map(int, input().split()) getNM d = getN() getN() d def getList():
    return list(map(int, input().split())) def getList():
    return list(map(int, input().split())) getList task = [] [] task
def getN():
    return int(input())
def getNM():
    return map(int, input().split())
def getList():
    return list(map(int, input().split()))
def getArray(intn):
    return [int(input()) for i in range(intn)]
def input():
    return sys.stdin.readline().rstrip()
def rand_N(ran1, ran2):
    return random.randint(ran1, ran2)
def rand_List(ran1, ran2, rantime):
    return [random.randint(ran1, ran2) for i in range(rantime)]
def rand_ints_nodup(ran1, ran2, rantime):
  ns = []
  while len(ns) < rantime:
    n = random.randint(ran1, ran2)
    if not n in ns:
      ns.append(n)
  return sorted(ns)

def rand_query(ran1, ran2, rantime):
  r_query = []
  while len(r_query) < rantime:
    n_q = rand_ints_nodup(ran1, ran2, 2)
    if not n_q in r_query:
      r_query.append(n_q)
  return sorted(r_query)

from collections import defaultdict, deque, Counter
from sys import exit
from decimal import *
import heapq
import math
from fractions import gcd
import random
import string
import copy
from itertools import combinations, permutations, product
from operator import mul, itemgetter
from functools import reduce
from bisect import bisect_left, bisect_right

import sys
sys.setrecursionlimit(1000000000)
mod = 10 ** 9 + 7

#############
# Main Code #
#############

# 各queryについてO(n)で答える
# 問題を言い換えると　　

# 地点Xに到着するのは時間 Di + Xの時
# S <= Di + X < Tとなる[S, T, N]がなければ通過できる
# SについてXの早い順にソートする

# 各Dについて、どのSまで通過できるかを各O(1)で答える？

N,Q = getNM()
# taskに
# 0:通行止め時間帯のスタート
# 1:通行止め時間帯のゴール
# 2:人
# を入れ、全部まとめて処理する
task = []

STX = [getList() for _ in range(N)]
for s, t, x in STX:
    task.append((t - x, 0, x)) # xで止まらなくなる
    task.append((s - x, 1, x)) # xで止まる

for i in range(Q):
    d = getN()
    task.append((d, 2, i)) # 止まる位置を答える
answer = [-1] * Q

task.sort()

# 引っかかってる場所の管理
se = set()
se_hp = [] # heapで最小値を先頭に保つ
heapq.heapify(se_hp)

# 小さい時刻から順に見ていく
# 人ciについてどの範囲cjの範囲内に入っているか
for a, b, c in task:
    # ゴール位置についての情報なら
    if b == 0:
        # そのゴールに対応するスタート位置を取り除く
        se.remove(c)
    # スタートについての情報なら
    elif b == 1:
        # スタート位置を追加する
        se.add(c)
        # スタート位置の最小値候補に入れる
        heapq.heappush(se_hp, c)
    # 人についての情報なら
    else:
        # se_hpの最小値がseにない（用済みのものが残っている）間
        # またはse_hpを抜き切るまで
        while se_hp and se_hp[0] not in se:
            heapq.heappop(se_hp)
        if se_hp:
            answer[c] = se_hp[0]
        else:
            answer[c] = -1
    # (-3, 1, 10) 10のものについてスタートを追加
    # se:{10} se_hp:[10]
    # (-1, 1, 2) 2のものについてスタートを追加
    # se:{10, 2} se_hp:[2, 10]
    # (0, 2, 0) 人0について調べる
    # se:{10, 2} se_hp[2, 10]
    # (1, 0, 2) 2のものについてゴールが来たのでスタート位置を取り除く
    # se:{10} se_hp:[2, 10] se_hpに余計なものが残る
    # (1, 1, 2) 2のものについてスタート位置をまた追加
    # se:{10, 2} se_hp:[2, 10, 2]

for i in answer:
    print(i)