#include <bits/stdc++.h>
#define REP(i,n) for((i)=0;(i)<(int)(n);(i)++)
#define foreach(c,itr) for(__typeof((c).begin()) itr=(c).begin();itr!=(c).end();itr++)
#define eps 1.0E-12
using namespace std;
fstream fi,fo;
int M,N;
double p[310][3010];
int len[310];
double q[310][3010];
double score[310][3010],dp[310][3010];
void update(int t, double prob){
int i;
double ignore_sum = 0.0;
for(i=len[t];i>=0;i--){
q[t][i+1] += q[t][i] * prob;
q[t][i] *= (1.0 - prob);
if(q[t][i] < 1.0E-50) q[t][i] = 0.0;
}
if(ignore_sum + q[t][len[t]+1] < eps){
ignore_sum += q[t][len[t]+1];
} else {
len[t]++;
}
}
int main(void){
fi.open("MIDAU.INP",ios::in);
fo.open("MIDAU.OUT",ios::out);
int tmp,i,j,k;
fi >> N >> M;
REP(i,N) REP(j,M){
fi >> tmp;
p[j][i] = tmp / 1000.0;
}
REP(i,M){
q[i][0] = 1.0;
REP(j,N) update(i,p[i][j]);
}
REP(i,M){
double expected = 0.0;
REP(j,len[i]+1) expected += q[i][j] * j;
score[i][len[i]] = expected;
double sumq = 0.0;
for(j=len[i]-1;j>=0;j--){
sumq += q[i][j+1];
score[i][j] = score[i][j+1] - sumq;
}
}
REP(i,M) REP(j,N+1) REP(k,len[i]+1) if(j+k <= N) dp[i+1][j+k] = max(dp[i+1][j+k], dp[i][j] + score[i][k]);
double ans = 0.0;
REP(i,N+1) ans = max(ans, dp[M][i]);
fo.precision(12);
fo << ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgUkVQKGksbikgZm9yKChpKT0wOyhpKTwoaW50KShuKTsoaSkrKykKI2RlZmluZSBmb3JlYWNoKGMsaXRyKSBmb3IoX190eXBlb2YoKGMpLmJlZ2luKCkpIGl0cj0oYykuYmVnaW4oKTtpdHIhPShjKS5lbmQoKTtpdHIrKykKCiNkZWZpbmUgZXBzIDEuMEUtMTIKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmZzdHJlYW0gZmksZm87CgppbnQgTSxOOwpkb3VibGUgcFszMTBdWzMwMTBdOwppbnQgbGVuWzMxMF07CmRvdWJsZSBxWzMxMF1bMzAxMF07CmRvdWJsZSBzY29yZVszMTBdWzMwMTBdLGRwWzMxMF1bMzAxMF07Cgp2b2lkIHVwZGF0ZShpbnQgdCwgZG91YmxlIHByb2IpewogICAgaW50IGk7CiAgICBkb3VibGUgaWdub3JlX3N1bSA9IDAuMDsKCiAgICBmb3IoaT1sZW5bdF07aT49MDtpLS0pewogICAgICAgIHFbdF1baSsxXSArPSBxW3RdW2ldICogcHJvYjsKICAgICAgICBxW3RdW2ldICo9ICgxLjAgLSBwcm9iKTsKICAgICAgICBpZihxW3RdW2ldIDwgMS4wRS01MCkgcVt0XVtpXSA9IDAuMDsKICAgIH0KCiAgICBpZihpZ25vcmVfc3VtICsgcVt0XVtsZW5bdF0rMV0gPCBlcHMpewogICAgICAgIGlnbm9yZV9zdW0gKz0gcVt0XVtsZW5bdF0rMV07CiAgICB9IGVsc2UgewogICAgICAgIGxlblt0XSsrOwogICAgfQp9CgppbnQgbWFpbih2b2lkKXsKICAgIGZpLm9wZW4oIk1JREFVLklOUCIsaW9zOjppbik7CiAgICBmby5vcGVuKCJNSURBVS5PVVQiLGlvczo6b3V0KTsKICAgIGludCB0bXAsaSxqLGs7CgogICAgZmkgPj4gTiA+PiBNOwogICAgUkVQKGksTikgUkVQKGosTSl7CiAgICAgICAgZmkgPj4gdG1wOwogICAgICAgIHBbal1baV0gPSB0bXAgLyAxMDAwLjA7CiAgICB9CgogICAgUkVQKGksTSl7CiAgICAgICAgcVtpXVswXSA9IDEuMDsKICAgICAgICBSRVAoaixOKSB1cGRhdGUoaSxwW2ldW2pdKTsKICAgIH0KCiAgICBSRVAoaSxNKXsKICAgICAgICBkb3VibGUgZXhwZWN0ZWQgPSAwLjA7CiAgICAgICAgUkVQKGosbGVuW2ldKzEpIGV4cGVjdGVkICs9IHFbaV1bal0gKiBqOwogICAgICAgIHNjb3JlW2ldW2xlbltpXV0gPSBleHBlY3RlZDsKCiAgICAgICAgZG91YmxlIHN1bXEgPSAwLjA7CiAgICAgICAgZm9yKGo9bGVuW2ldLTE7aj49MDtqLS0pewogICAgICAgICAgICBzdW1xICs9IHFbaV1baisxXTsKICAgICAgICAgICAgc2NvcmVbaV1bal0gPSBzY29yZVtpXVtqKzFdIC0gc3VtcTsKICAgICAgICB9CiAgICB9CgogICAgUkVQKGksTSkgUkVQKGosTisxKSBSRVAoayxsZW5baV0rMSkgaWYoaitrIDw9IE4pIGRwW2krMV1baitrXSA9IG1heChkcFtpKzFdW2ora10sIGRwW2ldW2pdICsgc2NvcmVbaV1ba10pOwoKICAgIGRvdWJsZSBhbnMgPSAwLjA7CiAgICBSRVAoaSxOKzEpIGFucyA9IG1heChhbnMsIGRwW01dW2ldKTsKICAgIGZvLnByZWNpc2lvbigxMik7CiAgICBmbyA8PCBhbnM7CiAgICByZXR1cm4gMDsKfQo=