#include <bits/stdc++.h>
#define N (17) 
using namespace std;
int m,n;
double neko[N][N];
double mem[N][1<<N];
int used[N][1<<N];

double dfs(int pos,int bit){
  if(pos==n) return 1;
  if(used[pos][bit]++) return mem[pos][bit];

  double res=0;
  for(int i=0;i<m;i++){
    if(bit&(1<<i))continue;
    double r=0,t=1;
    for(int j=pos;j<=n;j++){
      r+=t*(1-neko[i][j])*dfs(j,bit|(1<<i));
      t*=neko[i][j];
    }
    res = max(res,r);
  }
  return mem[pos][bit] = res;
}

int main(){

  cin>>m>>n;
  for(int i=0;i<m;i++){
    for(int j=0;j<n;j++)cin>>neko[i][j];
    neko[i][n] = 0;
  }

  printf("%.10f\n",dfs(0,0));
  return 0;
}