#include <bits/stdc++.h>
const int N = 100005, B = 320, M = 998244353;
using namespace std;
int n, k, ti, a[N], occ[N], pre[N], b[N], f[N], sum[B], q[B][B << 1 | 1], now;
inline void mdf(int x, int y) {
  b[x] = y;
  int z = x / B;
  if (z == now) return;
  sum[z] = 0;
  for (int i = 0; i <= B << 1; i++) q[z][i] = 0;
  for (int i = z * B + B - 1; i >= z * B; i--)
    sum[z] += b[i], (q[z][sum[z] + B] += f[i]) %= M;
  for (int i = 0; i < B << 1; i++) (q[z][i + 1] += q[z][i]) %= M;
}
int main() {
  scanf("%d%d", &n, &k);
  memset(occ, -1, N << 2);
  for (int i = 0; i < n; i++)
    scanf("%d", a + i), pre[i] = occ[a[i]], occ[a[i]] = i;
  f[0] = 1;
  for (int i = 0; i < n; i++) {
    now = (i + 1) / B, mdf(i, 1);
    if (~pre[i]) {
      mdf(pre[i], -1);
      if (~pre[pre[i]]) mdf(pre[pre[i]], 0);
    }
    ti = 0;
    for (int j = i; j / B == now && ~j; j--) {
      ti += b[j];
      if (ti <= k) (f[i + 1] += f[j]) %= M;
    }
    for (int j = now - 1; ~j; j--) {
      if (ti <= k + B) (f[i + 1] += q[j][min(B << 1, k + B - ti)]) %= M;
      ti += sum[j];
    }
  }
  printf("%d", f[n]);
}

### Prompt

Your task is to create a CPP solution to the following problem:

Find the number of ways to divide an array a of n integers into any number of disjoint non-empty segments so that, in each segment, there exist at most k distinct integers that appear exactly once.

Since the answer can be large, find it modulo 998 244 353.

Input

The first line contains two space-separated integers n and k (1 ≤ k ≤ n ≤ 10^5) — the number of elements in the array a and the restriction from the statement.

The following line contains n space-separated integers a_1, a_2, …, a_n (1 ≤ a_i ≤ n) — elements of the array a.

Output

The first and only line contains the number of ways to divide an array a modulo 998 244 353.

Examples

Input


3 1
1 1 2


Output


3


Input


5 2
1 1 2 1 3


Output


14


Input


5 5
1 2 3 4 5


Output


16

Note

In the first sample, the three possible divisions are as follows.

  * [[1], [1], [2]] 
  * [[1, 1], [2]] 
  * [[1, 1, 2]] 



Division [[1], [1, 2]] is not possible because two distinct integers appear exactly once in the second segment [1, 2].

### Response

```cpp
#include <bits/stdc++.h>
const int N = 100005, B = 320, M = 998244353;
using namespace std;
int n, k, ti, a[N], occ[N], pre[N], b[N], f[N], sum[B], q[B][B << 1 | 1], now;
inline void mdf(int x, int y) {
  b[x] = y;
  int z = x / B;
  if (z == now) return;
  sum[z] = 0;
  for (int i = 0; i <= B << 1; i++) q[z][i] = 0;
  for (int i = z * B + B - 1; i >= z * B; i--)
    sum[z] += b[i], (q[z][sum[z] + B] += f[i]) %= M;
  for (int i = 0; i < B << 1; i++) (q[z][i + 1] += q[z][i]) %= M;
}
int main() {
  scanf("%d%d", &n, &k);
  memset(occ, -1, N << 2);
  for (int i = 0; i < n; i++)
    scanf("%d", a + i), pre[i] = occ[a[i]], occ[a[i]] = i;
  f[0] = 1;
  for (int i = 0; i < n; i++) {
    now = (i + 1) / B, mdf(i, 1);
    if (~pre[i]) {
      mdf(pre[i], -1);
      if (~pre[pre[i]]) mdf(pre[pre[i]], 0);
    }
    ti = 0;
    for (int j = i; j / B == now && ~j; j--) {
      ti += b[j];
      if (ti <= k) (f[i + 1] += f[j]) %= M;
    }
    for (int j = now - 1; ~j; j--) {
      if (ti <= k + B) (f[i + 1] += q[j][min(B << 1, k + B - ti)]) %= M;
      ti += sum[j];
    }
  }
  printf("%d", f[n]);
}

```