You are given an integer sequence a_1, a_2, ..., a_n.

Find the number of pairs of indices (l, r) (1 ≤ l ≤ r ≤ n) such that the value of median of a_l, a_{l+1}, ..., a_r is exactly the given number m.

The median of a sequence is the value of an element which is in the middle of the sequence after sorting it in non-decreasing order. If the length of the sequence is even, the left of two middle elements is used.

For example, if a=[4, 2, 7, 5] then its median is 4 since after sorting the sequence, it will look like [2, 4, 5, 7] and the left of two middle elements is equal to 4. The median of [7, 1, 2, 9, 6] equals 6 since after sorting, the value 6 will be in the middle of the sequence.

Write a program to find the number of pairs of indices (l, r) (1 ≤ l ≤ r ≤ n) such that the value of median of a_l, a_{l+1}, ..., a_r is exactly the given number m.

Input

The first line contains integers n and m (1 ≤ n,m ≤ 2⋅10^5) — the length of the given sequence and the required value of the median.

The second line contains an integer sequence a_1, a_2, ..., a_n (1 ≤ a_i ≤ 2⋅10^5).

Output

Print the required number.

Examples

Input

5 4
1 4 5 60 4


Output

8


Input

3 1
1 1 1


Output

6


Input

15 2
1 2 3 1 2 3 1 2 3 1 2 3 1 2 3


Output

97

Note

In the first example, the suitable pairs of indices are: (1, 3), (1, 4), (1, 5), (2, 2), (2, 3), (2, 5), (4, 5) and (5, 5).
#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n, m;
int a[N];
struct ban {
  ban *l, *r;
  int q;
  ban() {
    l = r = 0;
    q = 0;
  }
};
ban *z, *k;
void ave(ban* pos) {
  if (pos->l == 0) pos->l = new ban;
  if (pos->r == 0) pos->r = new ban;
}
void ubd(int tl, int tr, int x, ban* pos) {
  if (tl == tr) {
    pos->q++;
    return;
  }
  ave(pos);
  int m = (tl + tr) / 2;
  if (m == tr) m = tl;
  if (x <= m)
    ubd(tl, m, x, pos->l);
  else
    ubd(m + 1, tr, x, pos->r);
  pos->q = pos->l->q + pos->r->q;
}
int qry(int tl, int tr, int l, int r, ban* pos) {
  if (l > r) return 0;
  if (tl == l && tr == r) return pos->q;
  ave(pos);
  int m = (tl + tr) / 2;
  if (m == tr) m = tl;
  if (r <= m) return qry(tl, m, l, r, pos->l);
  if (l > m) return qry(m + 1, tr, l, r, pos->r);
  return qry(tl, m, l, m, pos->l) + qry(m + 1, tr, m + 1, r, pos->r);
}
int p[N];
long long pp() {
  for (int i = 1; i <= n; ++i) {
    p[i] = p[i - 1];
    if (a[i] <= m) p[i]++;
  }
  long long ans = 0;
  z = new ban;
  k = new ban;
  int i = 0;
  ubd(-n, n, 2 * p[i] - i, z);
  for (i = 1; i <= n; ++i) {
    if (i == 3) cout << "";
    if (i % 2) {
      ans += qry(-n, n, -n, 2 * p[i] - i - 1, z);
      ans += qry(-n, n, -n, 2 * p[i] - i, k);
    } else {
      ans += qry(-n, n, -n, 2 * p[i] - i - 1, k);
      ans += qry(-n, n, -n, 2 * p[i] - i, z);
    }
    if (i % 2)
      ubd(-n, n, 2 * p[i] - i, k);
    else
      ubd(-n, n, 2 * p[i] - i, z);
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) cin >> a[i];
  long long ans = pp();
  --m;
  ans -= pp();
  cout << ans << endl;
  return 0;
}
