#include<bits/stdc++.h>
using namespace std;

int findNum(const set<int>& s, int x) {
    /*运行超时,注释的代码相当于把upper_bound转化了一遍但时间复杂度过大*/
    /*auto it = s.begin();
        vector<int>v;
        int sum=0;
        while(it !=s.end()){
            if(*it > x){
                v.push_back(*it);
                sum++;
            }
            it++;
        }
        if(sum == 0){
            return -1;
        }else{
            sort(v.begin(),v.end());
            return v[0];
        }*/
    auto it = s.upper_bound(x);
    /*其中,std::set 中的 upper_bound 函数是用来查找大于给定值的第一个元素的迭代器。

    具体来说,std::set::upper_bound 函数接受一个参数,并返回一个指向第一个大于该参数的元素的迭代器。如果找不到这样的元素(即给定值大于集合中的所有元素),则返回 end()。*/
    if (it == s.end()) {
        return -1;
    } else {
        return *it;
    }
}

int main() {
    set<int>s;
    //write your code here......
    int n, m, x;
    cin >> n >> m;

    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;
        s.insert(num);
    }

    for (int i = 0; i < m; i++) {
        int x;
        cin >> x;
        cout << findNum(s, x) << endl;
    }

    return 0;
}