/*
分析:
期望+dp。
水题、不过数学是绝对软肋、还是wa了一次。。
介个不错: http://kicd.blog.163.com/blog/static/126961911200910168335852/
至于dp过程中,为什么没有航班的点、dp[i]=sum(dp[j])+1(i+1<=j<=i+6)中、
要加一呢?因为期望就是步数、多走一步所以就要加1。。
2013-07-16
*/
#include"iostream"
#include"cstdio"
#include"queue"
#include"cstring"
#include"algorithm"
using namespace std;
const int M=1010;
const int N=100010;
int n,m;
int x[N],y[N],hash[N];
double dp[N];
int main()
{
int i,l;
while(scanf("%d%d",&n,&m),n||m)
{
memset(hash,-1,sizeof(hash));
for(i=0;i<m;i++)
{
scanf("%d%d",&x[i],&y[i]);
hash[x[i]]=y[i];
}
memset(dp,0,sizeof(dp));
for(i=n-1;i>=0;i--)
{
if(hash[i]!=-1) dp[i]=dp[hash[i]];
else
{
for(l=1;l<=6;l++) dp[i]+=dp[i+l];
dp[i]=dp[i]/6+1;
}
}
printf("%.4lf\n",dp[0]);
}
return 0;
}