#include <bits/stdc++.h>
using namespace std;
int N, C, A[3009], U[3009], ans;
bool D[3009][3009];
void go(int s, int e) {
if (s < 0 || N < e || s > e) return;
int p = -1;
vector<int> T;
for (int i = s - 1; i >= 1; i--) {
if (p == -1 || p <= A[i]) {
T.push_back(A[i]);
p = A[i];
} else break;
}
int l = 0, r = (int)T.size() - 1;
while (l <= r) {
int m = (l + r) >> 1;
vector<int> H(C + 1, 0);
for (int i = 0; i <= m; i++) ++H[T[i]];
int c = 0;
bool f = 1, sr = 1;
for (int i = e + 1; i <= N && c <= m; i++) {
if (H[A[i]]) {
--H[A[i]];
++c;
} else {
sr = 0;
if (A[i] < T[m]) f = 0;
}
}
f &= (c > m);
if (f) {
int L = s - m - 1, R = e + m + 1;
if (sr) while (L - 1 >= 1 && R + 1 <= N && A[L - 1] == A[R + 1]) --L, ++R;
ans = max(ans, R - L + 1);
}
if (f) l = m + 1;
else r = m - 1;
}
}
void Do(int s, bool SR) {
int p = -1;
vector<int> T;
for (int i = s - 1; i >= 1; i--) {
if (p == -1 || p <= A[i]) {
T.push_back(A[i]);
p = A[i];
} else break;
}
if (T.empty()) return;
int mn = T[0];
for (int i = s; i <= N; i++) if (T[0] > A[i]) { mn = A[i]; break; }
int l = 0, r = (int)T.size() - 1;
while (l <= r) {
int m = (l + r) >> 1;
vector<int> H(C + 1, 0);
for (int i = 0; i <= m; i++) ++H[T[i]];
int c = 0, mnc = 0;
bool f = 1, sr = 1;
for (int i = s; i <= N; i++) {
if (H[A[i]]) {
--H[A[i]];
++c;
} else if (A[i] == mn) ++mnc;
else {
if (sr && SR && c > m) break;
sr = 0;
if (A[i] < T[m]) break;
}
}
f &= (c > m);
if (f) {
int L = s - m - 1, R = s + m + mnc;
if (sr) while (L - 1 >= 1 && R + 1 <= N && A[L - 1] == A[R + 1]) --L, ++R;
ans = max(ans, R - L + 1);
}
if (f) l = m + 1;
else r = m - 1;
}
}
void solve() {
for (int i = N; i >= 1; i--) {
for (int j = i; j <= N; j++) {
if (i + 1 >= j && A[i] == A[j]) D[i][j] = 1;
else if (D[i + 1][j - 1] && A[i] == A[j]) D[i][j] = 1;
else D[i][j] = 0;
if (D[i][j]) ans = max(ans, j - i + 1);
}
}
for (int i = 1; i <= N; i++) {
int l = i, r = i;
while (l - 1 >= 1 && r + 1 <= N && D[l - 1][r + 1]) --l, ++r;
go(l, r);
l = i; r = i - 1;
while (l - 1 >= 1 && r + 1 <= N && D[l - 1][r + 1]) --l, ++r;
go(l, r);
Do(i, 0);
Do(i, 1);
}
}
int main() {
scanf("%d%d", &N, &C);
A[0] = 1000000000;
for (int i = 1; i <= N; i++) {
scanf("%d", &A[i]);
++U[A[i]];
}
for (int i = 1; i <= C; i++) ans = max(ans, U[i]);
solve();
reverse(A + 1, A + N + 1);
for (int i = 1; i <= N; i++) A[i] = C - A[i] + 1;
solve();
printf("%d\n", ans);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgTiwgQywgQVszMDA5XSwgVVszMDA5XSwgYW5zOwpib29sIERbMzAwOV1bMzAwOV07Cgp2b2lkIGdvKGludCBzLCBpbnQgZSkgewogICAgaWYgKHMgPCAwIHx8IE4gPCBlIHx8IHMgPiBlKSByZXR1cm47CgogICAgaW50IHAgPSAtMTsKICAgIHZlY3RvcjxpbnQ+IFQ7CiAgICBmb3IgKGludCBpID0gcyAtIDE7IGkgPj0gMTsgaS0tKSB7CiAgICAgICAgaWYgKHAgPT0gLTEgfHwgcCA8PSBBW2ldKSB7CiAgICAgICAgICAgIFQucHVzaF9iYWNrKEFbaV0pOwogICAgICAgICAgICBwID0gQVtpXTsKICAgICAgICB9IGVsc2UgYnJlYWs7CiAgICB9CgogICAgaW50IGwgPSAwLCByID0gKGludClULnNpemUoKSAtIDE7CiAgICB3aGlsZSAobCA8PSByKSB7CiAgICAgICAgaW50IG0gPSAobCArIHIpID4+IDE7CiAgICAgICAgdmVjdG9yPGludD4gSChDICsgMSwgMCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbTsgaSsrKSArK0hbVFtpXV07CiAgICAgICAgaW50IGMgPSAwOwogICAgICAgIGJvb2wgZiA9IDEsIHNyID0gMTsKICAgICAgICBmb3IgKGludCBpID0gZSArIDE7IGkgPD0gTiAmJiBjIDw9IG07IGkrKykgewogICAgICAgICAgICBpZiAoSFtBW2ldXSkgewogICAgICAgICAgICAgICAgLS1IW0FbaV1dOwogICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3IgPSAwOwogICAgICAgICAgICAgICAgaWYgKEFbaV0gPCBUW21dKSBmID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmICY9IChjID4gbSk7CgogICAgICAgIGlmIChmKSB7CiAgICAgICAgICAgIGludCBMID0gcyAtIG0gLSAxLCBSID0gZSArIG0gKyAxOwogICAgICAgICAgICBpZiAoc3IpIHdoaWxlIChMIC0gMSA+PSAxICYmIFIgKyAxIDw9IE4gJiYgQVtMIC0gMV0gPT0gQVtSICsgMV0pIC0tTCwgKytSOwogICAgICAgICAgICBhbnMgPSBtYXgoYW5zLCBSIC0gTCArIDEpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGYpIGwgPSBtICsgMTsKICAgICAgICBlbHNlIHIgPSBtIC0gMTsKICAgIH0KfQoKdm9pZCBEbyhpbnQgcywgYm9vbCBTUikgewogICAgaW50IHAgPSAtMTsKICAgIHZlY3RvcjxpbnQ+IFQ7CiAgICBmb3IgKGludCBpID0gcyAtIDE7IGkgPj0gMTsgaS0tKSB7CiAgICAgICAgaWYgKHAgPT0gLTEgfHwgcCA8PSBBW2ldKSB7CiAgICAgICAgICAgIFQucHVzaF9iYWNrKEFbaV0pOwogICAgICAgICAgICBwID0gQVtpXTsKICAgICAgICB9IGVsc2UgYnJlYWs7CiAgICB9CiAgICBpZiAoVC5lbXB0eSgpKSByZXR1cm47CgogICAgaW50IG1uID0gVFswXTsKICAgIGZvciAoaW50IGkgPSBzOyBpIDw9IE47IGkrKykgaWYgKFRbMF0gPiBBW2ldKSB7IG1uID0gQVtpXTsgYnJlYWs7IH0KCiAgICBpbnQgbCA9IDAsIHIgPSAoaW50KVQuc2l6ZSgpIC0gMTsKICAgIHdoaWxlIChsIDw9IHIpIHsKICAgICAgICBpbnQgbSA9IChsICsgcikgPj4gMTsKICAgICAgICB2ZWN0b3I8aW50PiBIKEMgKyAxLCAwKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBtOyBpKyspICsrSFtUW2ldXTsKICAgICAgICBpbnQgYyA9IDAsIG1uYyA9IDA7CiAgICAgICAgYm9vbCBmID0gMSwgc3IgPSAxOwogICAgICAgIGZvciAoaW50IGkgPSBzOyBpIDw9IE47IGkrKykgewogICAgICAgICAgICBpZiAoSFtBW2ldXSkgewogICAgICAgICAgICAgICAgLS1IW0FbaV1dOwogICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICB9IGVsc2UgaWYgKEFbaV0gPT0gbW4pICsrbW5jOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChzciAmJiBTUiAmJiBjID4gbSkgYnJlYWs7CiAgICAgICAgICAgICAgICBzciA9IDA7CiAgICAgICAgICAgICAgICBpZiAoQVtpXSA8IFRbbV0pIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGYgJj0gKGMgPiBtKTsKCiAgICAgICAgaWYgKGYpIHsKICAgICAgICAgICAgaW50IEwgPSBzIC0gbSAtIDEsIFIgPSBzICsgbSArIG1uYzsKICAgICAgICAgICAgaWYgKHNyKSB3aGlsZSAoTCAtIDEgPj0gMSAmJiBSICsgMSA8PSBOICYmIEFbTCAtIDFdID09IEFbUiArIDFdKSAtLUwsICsrUjsKICAgICAgICAgICAgYW5zID0gbWF4KGFucywgUiAtIEwgKyAxKTsKICAgICAgICB9CgogICAgICAgIGlmIChmKSBsID0gbSArIDE7CiAgICAgICAgZWxzZSByID0gbSAtIDE7CiAgICB9Cn0KCnZvaWQgc29sdmUoKSB7CiAgICBmb3IgKGludCBpID0gTjsgaSA+PSAxOyBpLS0pIHsKICAgICAgICBmb3IgKGludCBqID0gaTsgaiA8PSBOOyBqKyspIHsKICAgICAgICAgICAgaWYgKGkgKyAxID49IGogJiYgQVtpXSA9PSBBW2pdKSBEW2ldW2pdID0gMTsKICAgICAgICAgICAgZWxzZSBpZiAoRFtpICsgMV1baiAtIDFdICYmIEFbaV0gPT0gQVtqXSkgRFtpXVtqXSA9IDE7CiAgICAgICAgICAgIGVsc2UgRFtpXVtqXSA9IDA7CiAgICAgICAgICAgIGlmIChEW2ldW2pdKSBhbnMgPSBtYXgoYW5zLCBqIC0gaSArIDEpOwogICAgICAgIH0KICAgIH0KICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IE47IGkrKykgewogICAgICAgIGludCBsID0gaSwgciA9IGk7CiAgICAgICAgd2hpbGUgKGwgLSAxID49IDEgJiYgciArIDEgPD0gTiAmJiBEW2wgLSAxXVtyICsgMV0pIC0tbCwgKytyOwogICAgICAgIGdvKGwsIHIpOwogICAgICAgIGwgPSBpOyByID0gaSAtIDE7CiAgICAgICAgd2hpbGUgKGwgLSAxID49IDEgJiYgciArIDEgPD0gTiAmJiBEW2wgLSAxXVtyICsgMV0pIC0tbCwgKytyOwogICAgICAgIGdvKGwsIHIpOwogICAgICAgIERvKGksIDApOwogICAgICAgIERvKGksIDEpOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIHNjYW5mKCIlZCVkIiwgJk4sICZDKTsKICAgIEFbMF0gPSAxMDAwMDAwMDAwOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gTjsgaSsrKSB7CiAgICAgICAgc2NhbmYoIiVkIiwgJkFbaV0pOwogICAgICAgICsrVVtBW2ldXTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IEM7IGkrKykgYW5zID0gbWF4KGFucywgVVtpXSk7CiAgICBzb2x2ZSgpOwogICAgcmV2ZXJzZShBICsgMSwgQSArIE4gKyAxKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IE47IGkrKykgQVtpXSA9IEMgLSBBW2ldICsgMTsKICAgIHNvbHZlKCk7CiAgICBwcmludGYoIiVkXG4iLCBhbnMpOwogICAgcmV0dXJuIDA7Cn0=