# ref https://www.owlog.org/abc128/

import sys
sys.setrecursionlimit(10 ** 7)
from bisect import bisect_left

def main():
    input = sys.stdin.readline
    N, Q = map(int, input().split())

    # 通行止めの地点 (X,S,T)
    closure = []
    for _ in range(N):
        start, end, pos = map(int, input().split())
        closure.append((pos, start, end))

    # 座標の昇順でソート
    closure.sort()

    D = [int(input()) for _ in range(Q)]

    # 各人の止まる地点
    ans = [-1] * Q
    # その人が既に止まっているか
    skip = [-1] * Q

    # 各通行止めの地点で止まる人を探索
    # Dが範囲[S-X,T-X)にあるときに止まる
    for pos, start, end in closure:
        # 一番左の人のインデックス
        left = bisect_left(D, start - pos)
        # 一番右の人のインデックス
        right = bisect_left(D, end - pos)

        while left < right:
            if skip[left] == -1:
                # 停止座標を記録
                ans[left] = pos
                # 右端の人のインデックスを記録
                skip[left] = right
                left += 1
            else:
                # [left,skip[left])にいる人は既に止まっている
                left = skip[left]

    return ans


if __name__ == '__main__':
    print(*main(), sep='\n') import sys sys sys.setrecursionlimit(10 ** 7) sys.setrecursionlimit sys setrecursionlimit 10 ** 7 10 7 from bisect import bisect_left def main():
    input = sys.stdin.readline
    N, Q = map(int, input().split())

    # 通行止めの地点 (X,S,T)
    closure = []
    for _ in range(N):
        start, end, pos = map(int, input().split())
        closure.append((pos, start, end))

    # 座標の昇順でソート
    closure.sort()

    D = [int(input()) for _ in range(Q)]

    # 各人の止まる地点
    ans = [-1] * Q
    # その人が既に止まっているか
    skip = [-1] * Q

    # 各通行止めの地点で止まる人を探索
    # Dが範囲[S-X,T-X)にあるときに止まる
    for pos, start, end in closure:
        # 一番左の人のインデックス
        left = bisect_left(D, start - pos)
        # 一番右の人のインデックス
        right = bisect_left(D, end - pos)

        while left < right:
            if skip[left] == -1:
                # 停止座標を記録
                ans[left] = pos
                # 右端の人のインデックスを記録
                skip[left] = right
                left += 1
            else:
                # [left,skip[left])にいる人は既に止まっている
                left = skip[left]

    return ans main input = sys.stdin.readline input sys.stdin.readline sys.stdin sys stdin readline N, Q = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split Q closure = [] closure [] for _ in range(N):
        start, end, pos = map(int, input().split())
        closure.append((pos, start, end))

    # 座標の昇順でソート
     _ range(N) range N start, end, pos = map(int, input().split()) start map(int, input().split()) map int input().split() ().split () input split end pos closure.append((pos, start, end)) closure.append closure append (pos, start, end) pos start end closure.sort() closure.sort closure sort int(input()) for _ in range(Q) for _ in range(Q) _ range(Q) range Q for _ in range(Q) int(input()) int input() input D = [int(input()) for _ in range(Q)] D [int(input()) for _ in range(Q)] ans = [-1] * Q ans [-1] * Q [-1] -1 Q skip = [-1] * Q skip [-1] * Q [-1] -1 Q for pos, start, end in closure:
        # 一番左の人のインデックス
        left = bisect_left(D, start - pos)
        # 一番右の人のインデックス
        right = bisect_left(D, end - pos)

        while left < right:
            if skip[left] == -1:
                # 停止座標を記録
                ans[left] = pos
                # 右端の人のインデックスを記録
                skip[left] = right
                left += 1
            else:
                # [left,skip[left])にいる人は既に止まっている
                left = skip[left]

     pos start end closure left = bisect_left(D, start - pos) left bisect_left(D, start - pos) bisect_left D start - pos start pos right = bisect_left(D, end - pos) right bisect_left(D, end - pos) bisect_left D end - pos end pos while left < right:
            if skip[left] == -1:
                # 停止座標を記録
                ans[left] = pos
                # 右端の人のインデックスを記録
                skip[left] = right
                left += 1
            else:
                # [left,skip[left])にいる人は既に止まっている
                left = skip[left]

     left < right left right if skip[left] == -1:
                # 停止座標を記録
                ans[left] = pos
                # 右端の人のインデックスを記録
                skip[left] = right
                left += 1
            else:
                # [left,skip[left])にいる人は既に止まっている
                left = skip[left]

     skip[left] == -1 skip[left] skip left -1 ans[left] = pos ans[left] ans left pos skip[left] = right skip[left] skip left right left += 1 left 1 left = skip[left] left skip[left] skip left return ans ans if __name__ == '__main__':
    print(*main(), sep='\n') __name__ == '__main__' __name__ '__main__' print(*main(), sep='\n') print *main() main() main sep='\n' sep '\n' def main():
    input = sys.stdin.readline
    N, Q = map(int, input().split())

    # 通行止めの地点 (X,S,T)
    closure = []
    for _ in range(N):
        start, end, pos = map(int, input().split())
        closure.append((pos, start, end))

    # 座標の昇順でソート
    closure.sort()

    D = [int(input()) for _ in range(Q)]

    # 各人の止まる地点
    ans = [-1] * Q
    # その人が既に止まっているか
    skip = [-1] * Q

    # 各通行止めの地点で止まる人を探索
    # Dが範囲[S-X,T-X)にあるときに止まる
    for pos, start, end in closure:
        # 一番左の人のインデックス
        left = bisect_left(D, start - pos)
        # 一番右の人のインデックス
        right = bisect_left(D, end - pos)

        while left < right:
            if skip[left] == -1:
                # 停止座標を記録
                ans[left] = pos
                # 右端の人のインデックスを記録
                skip[left] = right
                left += 1
            else:
                # [left,skip[left])にいる人は既に止まっている
                left = skip[left]

    return ans def main():
    input = sys.stdin.readline
    N, Q = map(int, input().split())

    # 通行止めの地点 (X,S,T)
    closure = []
    for _ in range(N):
        start, end, pos = map(int, input().split())
        closure.append((pos, start, end))

    # 座標の昇順でソート
    closure.sort()

    D = [int(input()) for _ in range(Q)]

    # 各人の止まる地点
    ans = [-1] * Q
    # その人が既に止まっているか
    skip = [-1] * Q

    # 各通行止めの地点で止まる人を探索
    # Dが範囲[S-X,T-X)にあるときに止まる
    for pos, start, end in closure:
        # 一番左の人のインデックス
        left = bisect_left(D, start - pos)
        # 一番右の人のインデックス
        right = bisect_left(D, end - pos)

        while left < right:
            if skip[left] == -1:
                # 停止座標を記録
                ans[left] = pos
                # 右端の人のインデックスを記録
                skip[left] = right
                left += 1
            else:
                # [left,skip[left])にいる人は既に止まっている
                left = skip[left]

    return ans main
# ref https://www.owlog.org/abc128/

import sys
sys.setrecursionlimit(10 ** 7)
from bisect import bisect_left

def main():
    input = sys.stdin.readline
    N, Q = map(int, input().split())

    # 通行止めの地点 (X,S,T)
    closure = []
    for _ in range(N):
        start, end, pos = map(int, input().split())
        closure.append((pos, start, end))

    # 座標の昇順でソート
    closure.sort()

    D = [int(input()) for _ in range(Q)]

    # 各人の止まる地点
    ans = [-1] * Q
    # その人が既に止まっているか
    skip = [-1] * Q

    # 各通行止めの地点で止まる人を探索
    # Dが範囲[S-X,T-X)にあるときに止まる
    for pos, start, end in closure:
        # 一番左の人のインデックス
        left = bisect_left(D, start - pos)
        # 一番右の人のインデックス
        right = bisect_left(D, end - pos)

        while left < right:
            if skip[left] == -1:
                # 停止座標を記録
                ans[left] = pos
                # 右端の人のインデックスを記録
                skip[left] = right
                left += 1
            else:
                # [left,skip[left])にいる人は既に止まっている
                left = skip[left]

    return ans


if __name__ == '__main__':
    print(*main(), sep='\n')