#include <bits/stdc++.h>
#ifdef ONLINE_JUDGE
#define out(x)
#else
#define out(x) cerr<<#x"="<<(x)<<endl
#endif
using namespace std;
typedef long long LL;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<pii> vpii;
#define REP(i,n) for(int i=0; i<int(n); i++)
#define pb push_back
#define mp make_pair
#define X first
#define Y second
double f[51][51][2];
double p[51];
int main(){
	freopen("game.in", "r", stdin);
	freopen("game.out", "w", stdout);
	int n, k;
	while(scanf("%d%d",&n,&k)==2){
		--n; --k;
		if(n==1){
			printf("%.10lf\n", 1.0);
			return 0;
		}
		REP(i,n){
			scanf("%lf",p+i); //p[i] to larger index
			f[i][i][0]=f[i][i][1]=p[i];
		}
		for(int len=2; len<=n; ++len){
			for(int L=0; L+len-1<n; ++L){
				int R=L+len-1;
				double p0=f[L][R-1][0], p1=f[L+1][R][1];
				//  1-p0  p0   p1
				// <---o---->o--->
				//      <---
				//      1-p1
				//f[L][R][0]=p0*p1+p0*(1-p1)*p0*p1+p0*((1-p1)p0)^2*p1+...
				//f[L][R][1]=p1+(1-p1)p0*p1+...
				f[L][R][0]=p0*p1/(1-p0*(1-p1));
				f[L][R][1]=p1/(1-p0*(1-p1));
				//printf("f[%d][%d]=(%.5lf, %.5lf)\n", L, R, f[L][R][0], f[L][R][1]);
			}
		}
		double pnow=1, pwin=0;
		if(k==0){
			pwin=f[0][n-2][0];
		} else {
			for(int i=k; i+1<n; ++i){
				pwin+=pnow*(1-f[1][i][1])*f[0][n-2][0];
				pnow*=f[1][i][1];
			}
			pwin+=pnow*(1-f[1][n-1][1]);
		}
		printf("%.10lf\n", pwin);
	}
}
