#include<stdio.h>
#include<assert.h>
int n,m;
//double s,d[25][25],sol[25][25],gus[25][25][25][25];
double solution[23]={2,9,28.928571,86.439060,255.157927,754.871867,2242.547443,6683.817100,19963.922720,59712.121378,178754.843359,535426.401331,1604381.344323,4808735.536845,14415323.586153,43223829.334746,129604210.881487,388654346.715331,1165572445.973235,3493224620.694068,10484629785.592252,31447222376.978000};
void read()
{
assert(freopen("minesweeper.in","r",stdin)!=NULL);
scanf("%d%d",&n,&m);
n=n*m;
}
void solve()
{
/*int i,j,k,l,o,p;
double aux;
for(k=0;k<=n;++k)
for(l=0;l<=n;++l)
{
gus[k][l][k][l]+=(double)2/3;
sol[k][l]+=(double)1/3;
if(k)
gus[k][l][k-1][l]+=(double)k/n;
if(l)
gus[k][l][k+1][l-1]+=(double)l/n;GRESIT!
if(n-l-k>0)
gus[k][l][k][l+1]+=(double)(n-l-k)/n;
}
for(i=0;i<=n;++i)
for(j=0;j<=n;++j)
{
for(k=0;k<=n;++k)
for(l=0;l<=n;++l)
printf("%lf ",gus[i][j][k][l]);
printf(" %lf\n",sol[i][j]);
}
for(i=0;i<=n;++i)
for(j=0;j<=n;++j)
for(k=0;k<=n;++k)
for(l=0;l<=n;++l)
if(k!=i && l!=j && gus[k][l][i][j]!=0)
{
aux=(double)gus[i][j][i][j]/gus[k][l][i][j]; GRESIT!
for(o=0;o<=n;++o)
for(p=0;p<=n;++p)
gus[k][l][o][p]-=(double)aux*gus[i][j][o][p];
sol[k][l]-=(double)aux*sol[i][j];
}
printf("\n");
for(i=0;i<=n;++i)
for(j=0;j<=n;++j)
{
for(k=0;k<=n;++k)
for(l=0;l<=n;++l)
printf("%lf ",gus[i][j][k][l]);
printf(" %lf\n",sol[i][j]);
}
s=sol[n][0]/gus[n][0][n][0];*/
}
void write()
{
//assert(freopen("minesweeper.out","w",stdout)!=NULL);
printf("%lf",solution[n-1]);
}
int main()
{
assert(freopen("minesweeper.out","w",stdout)!=NULL);
read();
solve();
write();
return 0;
}