rt
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 1e5 + 10;
inline int read()
{
int x = 0; char ch = getchar();
while (!isdigit(ch)) ch = getchar();
while (isdigit(ch)) x = x * 10 + ch - 48, ch = getchar();
return x;
}
inline void write (int x)
{
if (x > 9) write(x / 10);
putchar (x % 10 + 48);
}
int n, k, a[MAXN], b[MAXN];
inline void input()
{
n = read(), k = read();
for (int i = 1; i <= n; ++ i) b[i] = a[i] = read();
}
int rnk[MAXN]; vector <int> cnt[MAXN];
inline void init()
{
sort (a + 1, a + n + 1);
int _k = unique(a + 1, a + n + 1) - a - 1;
for (int i = 1; i <= n; ++ i)
rnk[i] = lower_bound(a + 1, a + _k + 1, b[i]) - a, cnt[rnk[i]].push_back(i);
}
int last[MAXN], ans, c[MAXN]; unordered_map <int, bool> m;
inline int lowbit (int x) { return x & (-x); }
inline void update (int pos, int val)
{
while (pos <= n)
{
c[pos] += val;
pos += lowbit(pos);
}
}
inline int query (int pos)
{
int res = 0;
while (pos > 0)
{
res += c[pos];
pos -= lowbit(pos);
}
return res;
}
inline void work()
{
int kind = 0;
for (int i = 1; i <= n; ++ i)
{
if (!m[rnk[i]]) ++ kind;
else update(last[rnk[i]], -1);
m[rnk[i]] = true, update(last[rnk[i]] = i, 1);
int l = 0, r = i, mid, pos;
while (l <= r)
{
mid = l + r >> 1;
if (kind - query(mid - 1) <= k + 1) r = mid - 1, pos = mid;
else l = mid + 1;
}
l = 0, r = cnt[rnk[i]].size() - 1, mid; int res = 0;
while (l <= r)
{
mid = l + r >> 1;
if (pos <= cnt[rnk[i]][mid]) r = mid - 1, res = mid;
else l = mid + 1;
}
ans = max(ans, (long long)(cnt[rnk[i]].size() - 1 - res));
}
}
inline void output() { write(ans), putchar('\n'); }
signed main()
{
input();
init();
work();
output();
return 0;
}