#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
//左闭右闭
int binarySearch1(int n,int t){
	int left=1,right=n;
	while(left <= right)// 因为left == right的时候,在[left, right]是有效的空间,即相等时可以取到该元素,所以使用 <=
	{
	    int mid = (left + right)/2;
	    //如果left+right过大,导致和溢出,可以用mid = left + (right - left) / 2,防止溢出left+right
	    if(a[mid] > t)
	    {
	        right = mid - 1;// t即 target目标值 在左区间,所以[left, mid - 1]
	    }
	    else if(a[mid] < t)
	    {
	        left = mid + 1;// t 在右区间,所以[mid + 1, right]
	    }
	    else if(a[mid] == t)
	    {
	        return mid;// 数组中找到目标值,直接返回下标
	    }
	} 
	return -1;	
} 
//左闭右开区间
int binarySearch2(int n,int t){
	int left=1,right=n;
	// 版本二
	while(left < right)// 因为left == right的时候,在[left, right)是无效的空间,即相等时取不到该元素,所以使用 <
	{
	    int mid = (left + right)/2;
	    //如果left+right过大,导致和溢出,可以用mid = left + (right - left) / 2,防止溢出left+right
	    if(a[mid] > t)
	    {
	        right = mid;// t 在左区间,所以[left, mid)
	    }
	    else if(a[mid] < t)
	    {
	        left = mid + 1;// t 在右区间,所以[mid + 1, right)
	    }
	    else if(a[mid] == t)
	    {
	        return mid;// 数组中找到目标值,直接返回下标
	    }
	} 
	return -1;	
} 
//左开右开区间
int binarySearch3(int n,int t){
	int left=1,right=n; 
	while(left < right)// 因为left == right的时候,在(left, right)是无效的空间,即相等时取不到该元素,所以使用 <
	{
	    int mid = (left + right)/2;
	    //如果left+right过大,导致和溢出,可以用mid = left + (right - left) / 2,防止溢出left+right
	    if(a[mid] > t)
	    {
	        right = mid;// t 在左区间,所以(left, mid)
	    }
	    else if(a[mid] < t)
	    {
	        left = mid;// t 在右区间,所以(mid, right)
	    }
	    else if(a[mid] == t)
	    {
	        return mid;// 数组中找到目标值,直接返回下标
	    }
	}
	return -1;	
} 
//左开右闭 
int binarySearch4(int n,int t){
	int left=1,right=n;
	while(left < right)// 因为left == right的时候,在(left, right]是无效的空间,即相等时取不到该元素,所以使用 <
	{
	    int mid = (left + right)/2;
	    //如果left+right过大,导致和溢出,可以用mid = left + (right - left) / 2,防止溢出left+right
	    if(a[mid] > t)
	    {
	        right = mid - 1;// t 在左区间,所以(left, mid]
	    }
	    else if(a[mid] < t)
	    {
	        left = mid;// t 在右区间,所以(mid + 1, right]
	    }
	    else if(a[mid] == t)
	    {
	        return mid;// 数组中找到目标值,直接返回下标
	    }
	} 
	return -1;	
} 
int n,m,x;
int main() {
    ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0); 
 	cin>>n>>m;
 	for(int i=1;i<=n;i++)
 	{
 		cin>>a[i];
	}  
	while(m--){
		cin>>x;
		cout<<"方法1:"<<binarySearch1(n,x)<<endl;
		cout<<"方法2:"<<binarySearch2(n,x)<<endl;
		cout<<"方法3:"<<binarySearch3(n,x)<<endl;
		cout<<"方法4:"<<binarySearch4(n,x)<<endl;
	} 
    return 0;
}