#include <bits/stdc++.h>
using namespace std;
int N, C;
int A[3005], freq[3005];
bool isPal[3005][3005];
int ans = 0;
void calcPalindrome() {
for (int i = N; i >= 1; i--) {
for (int j = i; j <= N; j++) {
if (i == j) isPal[i][j] = true;
else if (i + 1 == j) isPal[i][j] = (A[i] == A[j]);
else isPal[i][j] = (A[i] == A[j] && isPal[i + 1][j - 1]);
if (isPal[i][j]) ans = max(ans, j - i + 1);
}
}
}
void tryExtend(int L, int R) {
// L, R은 현재 회문 범위
vector<int> leftPart;
int prev = -1;
for (int i = L - 1; i >= 1; i--) {
if (prev == -1 || prev <= A[i]) {
leftPart.push_back(A[i]);
prev = A[i];
} else break;
}
if (leftPart.empty()) return;
int lo = 0, hi = (int)leftPart.size() - 1;
while (lo <= hi) {
int mid = (lo + hi) / 2;
vector<int> cnt(C + 1, 0);
for (int i = 0; i <= mid; i++) cnt[leftPart[i]]++;
int match = 0;
bool can = true, sortedRight = true;
for (int i = R + 1; i <= N && match <= mid; i++) {
if (cnt[A[i]]) {
cnt[A[i]]--;
match++;
} else {
sortedRight = false;
if (A[i] < leftPart[mid]) can = false;
}
}
can &= (match > mid);
if (can) {
int newL = L - mid - 1;
int newR = R + mid + 1;
if (sortedRight) {
while (newL > 1 && newR < N && A[newL - 1] == A[newR + 1]) {
newL--;
newR++;
}
}
ans = max(ans, newR - newL + 1);
lo = mid + 1;
} else {
hi = mid - 1;
}
}
}
void solveOnce() {
calcPalindrome();
for (int center = 1; center <= N; center++) {
int l = center, r = center;
while (l > 1 && r < N && isPal[l - 1][r + 1]) l--, r++;
tryExtend(l, r);
l = center;
r = center - 1;
while (l > 1 && r < N && isPal[l - 1][r + 1]) l--, r++;
tryExtend(l, r);
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> N >> C;
for (int i = 1; i <= N; i++) {
cin >> A[i];
freq[A[i]]++;
}
for (int i = 1; i <= C; i++) ans = max(ans, freq[i]);
solveOnce();
reverse(A + 1, A + N + 1);
for (int i = 1; i <= N; i++) A[i] = C - A[i] + 1;
solveOnce();
cout << ans << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgTiwgQzsKaW50IEFbMzAwNV0sIGZyZXFbMzAwNV07CmJvb2wgaXNQYWxbMzAwNV1bMzAwNV07CmludCBhbnMgPSAwOwoKdm9pZCBjYWxjUGFsaW5kcm9tZSgpIHsKICAgIGZvciAoaW50IGkgPSBOOyBpID49IDE7IGktLSkgewogICAgICAgIGZvciAoaW50IGogPSBpOyBqIDw9IE47IGorKykgewogICAgICAgICAgICBpZiAoaSA9PSBqKSBpc1BhbFtpXVtqXSA9IHRydWU7CiAgICAgICAgICAgIGVsc2UgaWYgKGkgKyAxID09IGopIGlzUGFsW2ldW2pdID0gKEFbaV0gPT0gQVtqXSk7CiAgICAgICAgICAgIGVsc2UgaXNQYWxbaV1bal0gPSAoQVtpXSA9PSBBW2pdICYmIGlzUGFsW2kgKyAxXVtqIC0gMV0pOwogICAgICAgICAgICBpZiAoaXNQYWxbaV1bal0pIGFucyA9IG1heChhbnMsIGogLSBpICsgMSk7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHRyeUV4dGVuZChpbnQgTCwgaW50IFIpIHsKICAgIC8vIEwsIFLsnYAg7ZiE7J6sIO2ajOusuCDrspTsnIQKICAgIHZlY3RvcjxpbnQ+IGxlZnRQYXJ0OwogICAgaW50IHByZXYgPSAtMTsKICAgIGZvciAoaW50IGkgPSBMIC0gMTsgaSA+PSAxOyBpLS0pIHsKICAgICAgICBpZiAocHJldiA9PSAtMSB8fCBwcmV2IDw9IEFbaV0pIHsKICAgICAgICAgICAgbGVmdFBhcnQucHVzaF9iYWNrKEFbaV0pOwogICAgICAgICAgICBwcmV2ID0gQVtpXTsKICAgICAgICB9IGVsc2UgYnJlYWs7CiAgICB9CiAgICBpZiAobGVmdFBhcnQuZW1wdHkoKSkgcmV0dXJuOwoKICAgIGludCBsbyA9IDAsIGhpID0gKGludClsZWZ0UGFydC5zaXplKCkgLSAxOwogICAgd2hpbGUgKGxvIDw9IGhpKSB7CiAgICAgICAgaW50IG1pZCA9IChsbyArIGhpKSAvIDI7CiAgICAgICAgdmVjdG9yPGludD4gY250KEMgKyAxLCAwKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBtaWQ7IGkrKykgY250W2xlZnRQYXJ0W2ldXSsrOwoKICAgICAgICBpbnQgbWF0Y2ggPSAwOwogICAgICAgIGJvb2wgY2FuID0gdHJ1ZSwgc29ydGVkUmlnaHQgPSB0cnVlOwogICAgICAgIGZvciAoaW50IGkgPSBSICsgMTsgaSA8PSBOICYmIG1hdGNoIDw9IG1pZDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChjbnRbQVtpXV0pIHsKICAgICAgICAgICAgICAgIGNudFtBW2ldXS0tOwogICAgICAgICAgICAgICAgbWF0Y2grKzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNvcnRlZFJpZ2h0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpZiAoQVtpXSA8IGxlZnRQYXJ0W21pZF0pIGNhbiA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhbiAmPSAobWF0Y2ggPiBtaWQpOwoKICAgICAgICBpZiAoY2FuKSB7CiAgICAgICAgICAgIGludCBuZXdMID0gTCAtIG1pZCAtIDE7CiAgICAgICAgICAgIGludCBuZXdSID0gUiArIG1pZCArIDE7CiAgICAgICAgICAgIGlmIChzb3J0ZWRSaWdodCkgewogICAgICAgICAgICAgICAgd2hpbGUgKG5ld0wgPiAxICYmIG5ld1IgPCBOICYmIEFbbmV3TCAtIDFdID09IEFbbmV3UiArIDFdKSB7CiAgICAgICAgICAgICAgICAgICAgbmV3TC0tOwogICAgICAgICAgICAgICAgICAgIG5ld1IrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBhbnMgPSBtYXgoYW5zLCBuZXdSIC0gbmV3TCArIDEpOwogICAgICAgICAgICBsbyA9IG1pZCArIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaGkgPSBtaWQgLSAxOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBzb2x2ZU9uY2UoKSB7CiAgICBjYWxjUGFsaW5kcm9tZSgpOwogICAgZm9yIChpbnQgY2VudGVyID0gMTsgY2VudGVyIDw9IE47IGNlbnRlcisrKSB7CiAgICAgICAgaW50IGwgPSBjZW50ZXIsIHIgPSBjZW50ZXI7CiAgICAgICAgd2hpbGUgKGwgPiAxICYmIHIgPCBOICYmIGlzUGFsW2wgLSAxXVtyICsgMV0pIGwtLSwgcisrOwogICAgICAgIHRyeUV4dGVuZChsLCByKTsKCiAgICAgICAgbCA9IGNlbnRlcjsKICAgICAgICByID0gY2VudGVyIC0gMTsKICAgICAgICB3aGlsZSAobCA+IDEgJiYgciA8IE4gJiYgaXNQYWxbbCAtIDFdW3IgKyAxXSkgbC0tLCByKys7CiAgICAgICAgdHJ5RXh0ZW5kKGwsIHIpOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgY2luID4+IE4gPj4gQzsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IE47IGkrKykgewogICAgICAgIGNpbiA+PiBBW2ldOwogICAgICAgIGZyZXFbQVtpXV0rKzsKICAgIH0KICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IEM7IGkrKykgYW5zID0gbWF4KGFucywgZnJlcVtpXSk7CgogICAgc29sdmVPbmNlKCk7CgogICAgcmV2ZXJzZShBICsgMSwgQSArIE4gKyAxKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IE47IGkrKykgQVtpXSA9IEMgLSBBW2ldICsgMTsKICAgIHNvbHZlT25jZSgpOwoKICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7Cn0=