#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template<class T> using ordered_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define ll long long
#define int long long
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define F first
#define S second
#define rep(i,a,b) for (int i = (a); i < (b); ++i)
#define per(i,a,b) for (int i = (a); i >= (b); --i)
#define each(x, a) for (auto &x : a)
#define INF 1e18
#define MOD 1000000007
#define MOD2 998244353
#define pyset unordered_set
#define vec vector
#define pii pair<int,int>
#define vi vector<int>
#define vpii vector<pair<int,int>>
#define gpmap gp_hash_table
#define gpmapii gp_hash_table<int,int>
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n,q;
cin >> n >> q;
vi a(n);
for(int i = 0;i<n;i++){
cin >> a[i];
}
int t = 0;
vec<vi> decks;
decks.pb(a);
while(true){
vi b;
b.reserve(n);
int i = 0;
int j = n/2;
while(i < n/2 or j<n){
if(i == n/2){
b.pb(a[j]);
j++;
}
else if(j==n){
b.pb(a[i]);
i++;
}
else if(a[i]<a[j]){
b.pb(a[i]);
i++;
}
else{
b.pb(a[j]);
j++;
}
}
swap(a,b);
t++;
if(a==b){
break;
}
decks.pb(a);
}
rep(i,0,q){
int a,b;
cin >> a >> b;
cout << decks[min(t-1,a)][b-1] << endl;
}
return 0;
}