#include <bits/stdc++.h>
using namespace std;
namespace io {
void _(int &k) {
  char c;
  int e = 1;
  k = 0;
  while ((c = getchar()) > '9' || c < '0')
    if (c == '-') e = -1;
  k = c - '0';
  while ((c = getchar()) <= '9' && c >= '0') {
    k *= 10;
    k += c - '0';
  }
  k *= e;
}
void _(long long &k) {
  char c;
  int e = 1;
  k = 0;
  while ((c = getchar()) > '9' || c < '0')
    if (c == '-') e = -1;
  k = c - '0';
  while ((c = getchar()) <= '9' && c >= '0') {
    k *= 10;
    k += c - '0';
  }
  k *= e;
}
void _(char &c) {
  while ((c = getchar()) == ' ' || c == '\n')
    ;
}
void _(double &c) { scanf("%lf", &c); }
template <class t1, class t2>
void _(t1 &a, t2 &b) {
  _(a);
  _(b);
}
template <class t1, class t2, class t3>
void _(t1 &a, t2 &b, t3 &c) {
  _(a);
  _(b);
  _(c);
}
template <class t1, class t2, class t3, class t4>
void _(t1 &a, t2 &b, t3 &c, t4 &d) {
  _(a);
  _(b);
  _(c);
  _(d);
}
template <class t1, class t2, class t3, class t4, class t5>
void _(t1 &a, t2 &b, t3 &c, t4 &d, t5 &e) {
  _(a);
  _(b);
  _(c);
  _(d);
  _(e);
}
void _p(double k) { printf("%.6lf", k); }
template <class T>
void _p0(T k) {
  if (k >= 10) _p0(k / 10);
  putchar(k % 10 + '0');
}
template <class T>
void _p(T k) {
  if (k < 0) {
    putchar('-');
    _p0(-k);
  } else
    _p0(k);
}
template <class T>
void __p(T k) {
  _p(k);
  putchar(' ');
}
template <class T>
void _pn(T k) {
  _p(k);
  putchar('\n');
}
template <class t1, class t2>
void _p(t1 a, t2 b) {
  __p(a);
  _pn(b);
}
template <class t1, class t2, class t3>
void _p(t1 a, t2 b, t3 c) {
  __p(a);
  __p(b);
  _pn(c);
}
template <class t1, class t2, class t3, class t4>
void _p(t1 a, t2 b, t3 c, t4 d) {
  __p(a);
  __p(b);
  __p(c);
  _pn(d);
}
template <class T>
void op(T *a, int n) {
  int i;
  n--;
  for (i = 1; i <= n; i++) __p(a[i]);
  _pn(a[n + 1]);
}
int gi() {
  int first;
  _(first);
  return first;
}
long long gll() {
  long long first;
  _(first);
  return first;
}
}  // namespace io
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
void fop(const char *s) {
  char c[256], d[256];
  memset(c, 0, sizeof(c));
  memset(d, 0, sizeof(d));
  strcpy(c, s);
  strcpy(d, s);
  freopen(strcat(c, ".in"), "r", stdin);
  freopen(strcat(d, ".out"), "w", stdout);
}
void fcl() {
  fclose(stdin);
  fclose(stdout);
}
int eq(double a, double b) {
  return a + 0.00000000001 >= b && b + 0.00000000001 >= a;
}
template <class T>
void _ma(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
void _mi(T &a, T b) {
  if (a > b) a = b;
}
const int N = 1234567, EE = 100000000, GG = 1000000000, ima = 2147483647;
using namespace io;
int n, m, a[N], p[N], p1[N], f[N], g[N], v[N], an, t, T, z;
int main() {
  int i, j, a1, a2, i1;
  _(n, m);
  for (i = 1; i <= n; i++) _(a[i]);
  for (i = 1; i <= n; i++) f[i] = f[i - 1] + (a[i] == m);
  for (i = 1; i <= n; i++) {
    p[i] = p1[a[i]];
    p1[a[i]] = i;
  }
  an = f[n];
  for (i1 = n; i1 >= 1; i1--) {
    z = 0;
    t = 0;
    if (!v[i1] && a[i1] != m)
      for (i = i1; i; i = p[i]) {
        v[i] = 1;
        g[++z] = 1;
        g[++z] = -(f[i] - f[p[i]]);
      }
    for (i = 1; i <= z; i++) {
      t += g[i];
      if (t < 0) t = 0;
      _ma(an, f[n] + t);
    }
  }
  _pn(an);
}
