#include <bits/stdc++.h>
using namespace std;
int n, k;
int a[1000100];
struct RMQMAX {
  int rmq[1000100][21];
  void build_rmq() {
    for (int i = 1; (1 << i) <= n; i++) {
      for (int j = 0; j + (1 << i) - 1 < n; j++) {
        rmq[j][i] = max(rmq[j][i - 1], rmq[j + (1 << (i - 1))][i - 1]);
      }
    }
  }
  int query(int l, int r) {
    int k = 0;
    while (1 << (k + 1) <= r - l + 1) k++;
    return max(rmq[l][k], rmq[r - (1 << k) + 1][k]);
  }
  void init() {
    for (int i = 0; i < n; i++) {
      scanf("%d", &rmq[i][0]);
      rmq[i][0] *= 100;
    }
    build_rmq();
  }
} s1;
struct RMQMIN {
  int rmq[1000100][21];
  void build_rmq() {
    for (int i = 1; (1 << i) <= n; i++) {
      for (int j = 0; j + (1 << i) - 1 < n; j++) {
        rmq[j][i] = min(rmq[j][i - 1], rmq[j + (1 << (i - 1))][i - 1]);
      }
    }
  }
  int query(int l, int r) {
    int k = 0;
    while (1 << (k + 1) <= r - l + 1) k++;
    return min(rmq[l][k], rmq[r - (1 << k) + 1][k]);
  }
  void init() {
    for (int i = 0; i < n; i++) {
      scanf("%d", &rmq[i][0]);
    }
    build_rmq();
  }
} s2;
int main() {
  while (scanf("%d%d", &n, &k) != EOF) {
    s1.init();
    s2.init();
    for (int i = 0; i < n; i++) {
      int l = i, r = n - 1, nx = i;
      while (l <= r) {
        int mid = (l + r) >> 1;
        if (s1.query(i, mid) < s2.query(i, mid)) {
          l = mid + 1;
          nx = mid;
        } else
          r = mid - 1;
      }
      int x = min(s1.query(i, nx), s2.query(i, nx));
      int y = min(s1.query(i, nx + 1), s2.query(i, nx + 1));
      a[i] = max(x, y);
    }
    sort(a, a + n);
    double p = 1.0 * k / n;
    double ans = p * a[0];
    for (int i = 1; i + k <= n; i++) {
      p = p * (n - i - k + 1) / (n - i);
      ans += p * a[i];
    }
    printf("%.12f\n", ans);
  }
  return 0;
}
