#include<cstdio>
#include<cassert>
#ifdef INFOARENA
#define ProblemName "dezastru"
#endif
#define MCONCAT(A, B) A B
#ifdef ProblemName
#define InFile MCONCAT(ProblemName, ".in")
#define OuFile MCONCAT(ProblemName, ".out")
#else
#define InFile "fis.in"
#define OuFile "fis.out"
#endif
double rez;
double p[28];
int N, K;
int combs;
inline void bkt(int l, int lastidx, double cur) {
if (l == K) {
rez += cur;
++combs;
return;
}
for (register int i = lastidx + 1; i <= N - K + l; ++i)
bkt(l + 1, i, cur * p[i]);
}
#define REP(x,y) for (register int i##x = i##y + 1; i##x <= N - K + x; ++i##x)
#define CUR(x,y) cur##x = cur##y * p[i##y];
inline void bkt_12() {
double cur0, cur1, cur2, cur3, cur4, cur5, cur6, cur7, cur8, cur9, cur10, cur11;
cur0 = 1.0;
combs = 5200300;
for (register int i0 = 0; i0 <= N - K; ++i0) {
cur1 = cur0 * p[i0];
REP(1, 0) {
CUR(2, 1);
REP(2, 1) {
CUR(3, 2);
REP(3, 2) {
CUR(4, 3);
REP(4, 3) {
CUR(5, 4);
REP(5, 4) {
CUR(6, 5);
REP(6, 5) {
CUR(7, 6);
REP(7, 6) {
CUR(8, 7);
REP(8, 7) {
CUR(9, 8);
REP(9, 8) {
CUR(10, 9);
REP(10, 9) {
CUR(11, 10);
rez += cur11;
}
}
}
}
}
}
}
}
}
}
}
}
inline void bkt_13() {
double cur0, cur1, cur2, cur3, cur4, cur5, cur6, cur7, cur8, cur9, cur10, cur11, cur12;
cur0 = 1.0;
combs = 5200300;
for (register int i0 = 0; i0 <= N - K; ++i0) {
cur1 = cur0 * p[i0];
REP(1, 0) {
CUR(2, 1);
REP(2, 1) {
CUR(3, 2);
REP(3, 2) {
CUR(4, 3);
REP(4, 3) {
CUR(5, 4);
REP(5, 4) {
CUR(6, 5);
REP(6, 5) {
CUR(7, 6);
REP(7, 6) {
CUR(8, 7);
REP(8, 7) {
CUR(9, 8);
REP(9, 8) {
CUR(10, 9);
REP(10, 9) {
CUR(11, 10);
REP(11, 10) {
CUR(12, 11);
rez += cur12;
}
}
}
}
}
}
}
}
}
}
}
}
}
int main() {
freopen(InFile, "r", stdin);
freopen(OuFile, "w", stdout);
scanf("%d%d", &N, &K);
for (int i = 0; i < N; ++i)
scanf("%lf", &p[i]);
if (N == 25 && K == 12)
bkt_12();
else if (N == 25 && K == 13)
bkt_13();
else bkt(0, -1, 1.0);
printf("%.6lf\n", rez / combs);
return 0;
}