func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 3e5 + 5;   int n, q, a[N];   int rt[N * 20], ls[N * 20], rs[N * 20], sum[N * 20], cnt = 0;   void change(int pre, int& o, int l, int r, int pos) {     o = ++cnt;     ls[o] = ls[pre];     rs[o] = rs[pre];     sum[o] = sum[pre] + 1;     if (l == r) return;     int m = (l + r) / 2;     if (pos <= m)       change(ls[pre], ls[o], l, m, pos);     else       change(rs[pre], rs[o], m + 1, r, pos);   }   int query(int pre, int o, int l, int r, int k) {     if (l == r) return l;     int m = (l + r) / 2;     if (sum[ls[o]] - sum[ls[pre]] > k) {       int res = query(ls[pre], ls[o], l, m, k);       if (res != -1) return res;     }     if (sum[rs[o]] - sum[rs[pre]] > k) {       int res = query(rs[pre], rs[o], m + 1, r, k);       if (res != -1) return res;     }     return -1;   }   int main() {     scanf( %d%d , &n, &q);     for (int i = 1; i <= n; i++) {       scanf( %d , &a[i]);       change(rt[i - 1], rt[i], 1, n, a[i]);     }     while (q--) {       int l, r, k;       scanf( %d%d%d , &l, &r, &k);       int ans = query(rt[l - 1], rt[r], 1, n, (r - l + 1) / k);       printf( %d n , ans);     }     return 0;   }   