#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;
}