#include <bits/stdc++.h>
using namespace std;
const int maxn = 1E6 + 10;
int n, a[maxn][20], b[maxn][20], c[maxn], LOG[maxn];
bool Judge(int l, int r) {
  int len = LOG[r - l + 1];
  int A = 100 * max(a[l][len], a[r - (1 << len) + 1][len]);
  int B = min(b[l][len], b[r - (1 << len) + 1][len]);
  return A < B;
}
int main() {
  int k;
  cin >> n >> k;
  for (int i = 1; i <= n; i++) scanf("%d", &a[i][0]);
  for (int i = 1; i <= n; i++) scanf("%d", &b[i][0]);
  for (int j = 1; j < 20; j++)
    for (int i = 1; i <= n; i++) {
      if (i + (1 << j - 1) > n) break;
      a[i][j] = max(a[i][j - 1], a[i + (1 << (j - 1))][j - 1]);
      b[i][j] = min(b[i][j - 1], b[i + (1 << (j - 1))][j - 1]);
    }
  int now = 0, sum = 1;
  for (int i = 1; i <= n; i++) {
    if (sum >= i)
      LOG[i] = now - 1;
    else {
      sum <<= 1;
      ++now;
      LOG[i] = now - 1;
    }
  }
  LOG[1] = 0;
  for (int i = 1; i <= n; i++) {
    int L, R;
    L = i;
    R = n;
    while (R - L > 1) {
      int mid = (L + R) >> 1;
      if (Judge(i, mid))
        L = mid;
      else
        R = mid;
    }
    int len = LOG[L - i + 1];
    int A = 100 * max(a[i][len], a[L - (1 << len) + 1][len]);
    int B = min(b[i][len], b[L - (1 << len) + 1][len]);
    c[i] = min(A, B);
    len = LOG[R - i + 1];
    A = 100 * max(a[i][len], a[R - (1 << len) + 1][len]);
    B = min(b[i][len], b[R - (1 << len) + 1][len]);
    c[i] = max(c[i], min(A, B));
  }
  sort(c + 1, c + n + 1);
  double ans = 0;
  double N = n - 1;
  double M = k - 1;
  double v = (double)(k) / (double)(n);
  for (int i = 1; i <= n; i++) {
    if (n - i < k - 1) break;
    ans += v * (double)(c[i]);
    v = v / N * (N - M);
    N -= 1.00;
  }
  printf("%.10f", ans);
  return 0;
}
