#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1000006;
int n, k;
int v[N], c[N];
int dn[N][20], dx[N][20];
int fn(int i, int j) {
  if (j == 0) return c[i];
  if (~dn[i][j]) return dn[i][j];
  return dn[i][j] = min(fn(i, j - 1), fn(i + (1 << (j - 1)), j - 1));
}
int lg(int x) { return 31 - __builtin_clz(x); }
int getmn(int l, int r) {
  int lz = lg(r - l + 1);
  return min(fn(l, lz), fn(r - (1 << lz) + 1, lz));
}
int fx(int i, int j) {
  if (j == 0) return v[i];
  if (~dx[i][j]) return dx[i][j];
  return dx[i][j] = max(fx(i, j - 1), fx(i + (1 << (j - 1)), j - 1));
}
int getmx(int l, int r) {
  int lz = lg(r - l + 1);
  return max(fx(l, lz), fx(r - (1 << lz) + 1, lz));
}
int p(int l, int r) { return min(getmx(l, r), getmn(l, r)); }
int best[N];
int main() {
  memset(dn, -1, sizeof dn);
  memset(dx, -1, sizeof dx);
  scanf("%d %d", &n, &k);
  for (int i = 1; i <= n; i++) scanf("%d", v + i), v[i] *= 100;
  for (int i = 1; i <= n; i++) scanf("%d", c + i);
  for (int i = 1, j = 1; i <= n; i++) {
    j = max(j, i);
    while (j + 1 <= n and getmn(i, j + 1) >= getmx(i, j + 1)) j++;
    best[i] = max(best[i], p(i, j));
    if (j + 1 <= n) {
      best[i] = max(best[i], p(i, j + 1));
    }
  }
  sort(best + 1, best + n + 1);
  long double ans = 0;
  long double coef = 1;
  for (int i = 1; i + k - 1 <= n; i++) {
    long double p = k;
    p /= n - i + 1;
    ans += p * coef * best[i];
    coef *= 1 - p;
  }
  printf("%.20Lf\n", ans);
}
