include [HTML_REMOVED]
using namespace std;
const int N = 100010;
int arr[N];
int n, q, k;
// 解释一下上面是 L + R >> 1 ,而下面是 L + R + 1 >> 1
// 上面是需要找左边界,而指针只要落到 arr[mid] < k区间,左边界就会 + 1,也就是说我们要必须避免判断条件一直落在
// arr[mid] >= k,因为这样会陷入死循环,r = mid会一直不变,所以使用 L + R >> 1,这种二分方式,区间是会一直向左缩小的
// 同理下面的需要使用 L + R + 1 >> 1
int main() {
cin >> n >> q;
for(int i = 0;i < n; ++ i) cin >> arr[i];
while(q–) {
cin >> k;
int l = 0, r = n - 1;
while(l < r) {
int mid = l + r >> 1;
if(arr[mid] < k) {
l = mid + 1;
}else {
r = mid;
}
}
if(arr[l] != k) {
cout << -1 << ‘ ‘ << -1 << endl;
}else {
cout << l << ‘ ‘;
l = 0, r = n - 1;
while(l < r) {
int mid = l + r + 1 >> 1;
if(arr[mid] > k) {
r = mid - 1;
}else {
l = mid;
}
}
cout << l << endl;
}
}
return 0;
}