func_code_string: #include <bits/stdc++.h>   using namespace std;   long long gcd1(long long a, long long b) {     if (a == 0) return b;     return gcd1(b % a, a);   }   long long modx(long long base, long long ex) {     long long ans = 1LL, val = base;     while (ex > 0LL) {       if (ex & 1LL) ans = (ans * val) % 998244353LL;       val = (val * val) % 998244353LL;       ex = ex >> 1LL;     }     return ans;   }   const int maxn = 5e5 + 10;   int a[maxn], n, c;   int pre[maxn], suff[maxn];   int cnt[maxn], ans;   vector<int> v[maxn];   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     cin >> n >> c;     for (int i = 1; i <= n; i++) {       cin >> a[i];       v[a[i]].push_back(i);       if (a[i] == c)         cnt[i] = cnt[i - 1] + 1;       else         cnt[i] = cnt[i - 1];     }     ans = cnt[n];     for (int i = 1; i < maxn; i++) {       if (i == c) continue;       if (v[i].size() == 0) continue;       for (int j = 0; j < v[i].size(); j++) {         pre[j] = cnt[v[i][j]];         pre[j]++;         if (j > 0) pre[j] = max(pre[j], pre[j - 1] + 1);       }       for (int j = v[i].size() - 1; j >= 0; j--) {         suff[j] = cnt[n] - cnt[v[i][j]];         suff[j]++;         if (j + 1 < v[i].size()) suff[j] = max(suff[j], suff[j + 1] + 1);       }       for (int j = 0; j < v[i].size(); j++) {         ans = max(ans, pre[j] + suff[j] - 1);       }     }     cout << ans << endl;     return 0;   }   