#include #include #include #include #include #include #define ST first #define ND second #define MP make_pair #define PB push_back using namespace std; typedef pair PI; const int MAXN = 1000100; int n, q, t[MAXN], ak, co[MAXN], a, b, res[MAXN]; vector v[MAXN]; vector pytania[MAXN]; set secik; map m; PI stara, najblizszy; int main () { bool beg = true; while (true) { scanf("%d %d", &n, &q); if (n==0 && q==0) return 0; if (!beg) printf("\n"); beg = false; for (int i=1; i<=n; i++) { scanf("%d", &t[i]); m.insert(MP(t[i], 0)); } for (map :: iterator it = m.begin(); it!=m.end(); it++) { co[ak] = it->ST; it->ND = ak++; } for (int i=1; i<=n; i++) t[i] = m[t[i]]; // for (int i=1; i<=n; i++) // printf("%d ", t[i]); // printf("\n"); for (int i=1; i<=q; i++) { scanf("%d %d", &a, &b); pytania[b].PB(MP(a, i)); } for (int i=1; i<=n; i++) { a = t[i]; if (v[a].size() == 2) { stara = MP(v[a][0], a); v[a][0] = v[a][1]; v[a][1] = i; secik.erase(stara); // printf("wrzucam na seta %d %d=\n", v[a][0], a); secik.insert(MP(v[a][0], a)); } else if (v[a].size() < 2) { v[a].PB(i); // printf("wrzucam na seta %d %d=\n", v[a][0], a); if (v[a].size() == 2) secik.insert(MP(v[a][0], a)); } if (secik.size() == 0) continue; najblizszy = *secik.rbegin(); // printf("najmniejszy w secie to %d %d\n", najblizszy.ST, najblizszy.ND); for(int j=0; j