from bisect import bisect_left,bisect_right N,A = map(int,input().split()) X = [-1]+list(map(int,input().split())) T = int(input()) B = [list(map(int,input().split())) for _ in range(T)] C = set(X[:]) for l,r in B: C.add(l) C.add(r) C = sorted(list(C)) DX = {} DL = [0]*T DR = [0]*T for i in range(1,N+1): ind = bisect_left(C,X[i]) DX[X[i]] = ind for t in range(T): Lt,Rt = B[t] indL = bisect_left(C,Lt) indR = bisect_left(C,Rt) DL[t] = indL DR[t] = indR M = len(X)+2*T K = 0 while (1<0: cnt += BIT[i] i -= i&(-i) return cnt for i in range(1,N+1): ind = DX[X[i]] bit_add(ind,1) ans = {} def bit_find(ind): low = ind-1 high = M while high-low>1: cum_low = bit_cumsum(ind-1) mid = (high+low)//2 if bit_cumsum(mid)>cum_low: high = mid else: low = mid return high for t in range(T,0,-1): indL = DL[t-1] indR = DR[t-1] S = bit_cumsum(indR)-bit_cumsum(indL-1) while S>0: ind = bit_find(indL) ans[C[ind]] = t bit_add(ind,-1) S = bit_cumsum(indR)-bit_cumsum(indL-1) for i in range(1,N+1): print(ans.get(X[i],-1))