#include <bits/stdc++.h>
using namespace std;
const int MAX = 1e5 + 1e2;
int A[MAX], B[MAX], n, m;
int BIT[2][MAX];
int pref[MAX], suff[MAX];
void update(int p, int v, int *T) {
  for (; p <= m + 1; p += ((p) & (-(p)))) T[p] += v;
}
int get(int p, int *T) {
  int ret = 0;
  for (; p; p ^= ((p) & (-(p)))) ret += T[p];
  return ret;
}
int main() {
  long long k;
  scanf("%d %lld", &n, &k);
  for (int i = 0; i < (n); i++) scanf("%d", A + i), B[i] = A[i];
  sort(B, B + n);
  m = unique(B, B + n) - B;
  for (int i = 0; i < (n); i++) A[i] = upper_bound(B, B + m, A[i]) - B;
  long long inv = 0, tot_inv = 0, ans = 0, cnt = 0, inv_out;
  for (int i = 0; i < (n); i++) {
    tot_inv += get(m + 1, BIT[0]) - get(A[i], BIT[0]);
    update(A[i], 1, BIT[0]);
  }
  inv_out = tot_inv;
  memset(BIT, 0, sizeof BIT);
  for (int i = n - 1; i >= 0; i--) {
    suff[i] = get(A[i] - 1, BIT[0]);
    update(A[i], 1, BIT[0]);
  }
  memset(BIT, 0, sizeof BIT);
  int l = 0;
  update(A[l], 1, BIT[1]);
  for (int r = 1; r < n; r++) {
    if (r != l + 1) {
      inv += get(m + 1, BIT[0]) - get(A[r - 1], BIT[0]);
      inv_out -= suff[r - 1];
      inv_out -= get(m + 1, BIT[1]) - get(A[r - 1], BIT[1]);
      update(A[r - 1], 1, BIT[0]);
      assert(inv >= 0);
      assert(inv_out >= 0);
    }
    while (l + 1 < r && inv_out <= k) {
      ++l;
      inv -= get(A[l] - 1, BIT[0]);
      update(A[l], -1, BIT[0]);
      inv_out += suff[l] - get(A[l] - 1, BIT[0]);
      inv_out += get(m + 1, BIT[1]) - get(A[l], BIT[1]);
      update(A[l], 1, BIT[1]);
    }
    assert(inv >= 0);
    assert(inv_out >= 0);
    ans += l + (inv_out <= k);
  }
  cerr << ans << endl;
  cout << ans << endl;
  return 0;
}
