#include <bits/stdc++.h>
using namespace std;
const int MXN = 1024 * 1024;
int n;
int k;
int v[MXN];
int c[MXN];
int p[MXN];
pair<int, int> vstk[MXN];
pair<int, int> cstk[MXN];
int vn, cn;
static pair<int, int> getxy(int iv) {
  int p1 = vstk[iv].first;
  auto cx =
      lower_bound(cstk, cstk + cn, p1,
                  [](const pair<int, int>& a, int b) { return a.first > b; });
  return {vstk[iv].second, cx->second};
}
static void calcP() {
  vn = 0;
  cn = 0;
  for (int i = n - 1; i >= 0; i--) {
    while (vn > 0 && vstk[vn - 1].second <= v[i]) vn--;
    vstk[vn++] = pair<int, int>(i, v[i]);
    while (cn > 0 && cstk[cn - 1].second >= c[i]) cn--;
    cstk[cn++] = pair<int, int>(i, c[i]);
    int l = 0, r = vn - 1;
    while (l < r) {
      int m = (l + r) / 2;
      pair<int, int> xy = getxy(m);
      if (xy.first < xy.second)
        r = m;
      else
        l = m + 1;
    }
    pair<int, int> a1 = getxy(l);
    int tans = min(a1.first, a1.second);
    if (l > 0) {
      a1 = getxy(l - 1);
      tans = max(tans, min(a1.first, a1.second));
    }
    p[i] = tans;
  }
}
static double solve() {
  for (int i = 0; i < n; i++) v[i] *= 100;
  calcP();
  sort(p, p + n);
  double prb = double(k) / n;
  double ans = p[0] * prb;
  for (int i = 1; i < n && n - k - i + 1 >= 0; i++) {
    prb *= n - k - i + 1;
    prb /= (n - i);
    ans += p[i] * prb;
  }
  return ans;
}
int main() {
  while (scanf("%d %d", &n, &k) == 2) {
    for (int i = 0; i < n; i++) scanf("%d", v + i);
    for (int i = 0; i < n; i++) scanf("%d", c + i);
    double ans = solve();
    printf("%.7f\n", ans);
  }
  return 0;
}
