func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long INF = 0x3f3f3f3f;   const int N = 2e5 + 10;   const int M = 1e6 + 10;   const long long mod = 1e9 + 7;   const double PI = acos(-1);   int sq = 3000;   int cntq, cntc;   map<int, int> mp;   int vis[N];   int cnt[N];   int num[N];   int ans[N];   struct query {     int l, r, z, id;   } qq[N];   struct change {     int x, y;   } ch[N];   bool cmp1(query a, query b) {     if (a.l / sq == b.l / sq) {       if (a.r / sq == b.r / sq)         return a.z < b.z;       else         return a.r < b.r;     } else       return a.l < b.l;   }   void update(int x, int y) {     vis[cnt[num[x]]]--;     cnt[num[x]] += y;     vis[cnt[num[x]]]++;   }   void solve() {     int l = 1, r = 1, c = 0, res;     update(1, 1);     for (int i = 1; i <= cntq; ++i) {       while (r < qq[i].r) update(++r, 1);       while (r > qq[i].r) update(r--, -1);       while (l > qq[i].l) update(--l, 1);       while (l < qq[i].l) update(l++, -1);       while (c > qq[i].z) {         if (ch[c].x >= l && ch[c].x <= r) update(ch[c].x, -1);         swap(ch[c].y, num[ch[c].x]);         if (ch[c].x >= l && ch[c].x <= r) update(ch[c].x, 1);         c--;       }       while (c < qq[i].z) {         c++;         if (ch[c].x >= l && ch[c].x <= r) update(ch[c].x, -1);         swap(ch[c].y, num[ch[c].x]);         if (ch[c].x >= l && ch[c].x <= r) update(ch[c].x, 1);       }       res = 1;       while (vis[res]) res++;       ans[qq[i].id] = res;     }   }   int main() {     int n, q, tot = 0, x, op, l, r;     scanf( %d%d , &n, &q);     for (int i = 1; i <= n; ++i) {       scanf( %d , &x);       if (mp[x])         num[i] = mp[x];       else         num[i] = mp[x] = ++tot;     }     for (int i = 1; i <= q; ++i) {       scanf( %d%d%d , &op, &l, &r);       if (op == 1) {         ++cntq;         qq[cntq] = {l, r, cntc, cntq};       } else {         ++cntc;         if (mp[r])           r = mp[r];         else           r = mp[r] = ++tot;         ch[cntc] = {l, r};       }     }     sort(qq + 1, qq + cntq + 1, cmp1);     solve();     for (int i = 1; i <= cntq; ++i) printf( %d n , ans[i]);     return 0;   }   