/*
LANG: C
TASK: trade
*/
#include<stdio.h>
    double min=999999999,sum[1000]={1},dist[1000]={1};
    int m,n,dis[1000],dis2[1000],a[1000000][2];
double rec(int j)
{
    int i;
    if(sum[j])return sum[j];
    else
    {
      for(i=0;i<m;i++)if(a[i][1]==j)break;
      while(i<m && a[i][1]==j){dist[j]+=rec(a[i][0]);i++;}
      return dist[j]/dis2[j]+1.0/dis[j];
    }
}
int main()
{
    int tmp,j,i,k;
    scanf("%d%d",&n,&m);
    for(i=0;i<m;i++)
    {
     scanf("%d%d",&a[i][0],&a[i][1]);
     dis[a[i][0]]++;
     dis2[a[i][1]]++;
    }
    for(i=0;i<m-1;i++)
     for(j=i+1;j<m;j++)
     if(a[i][1]>a[j][1])
     {
        tmp=a[i][1];
        a[i][1]=a[j][1];
        a[j][1]=tmp;
        tmp=a[i][0];
        a[i][0]=a[j][0];
        a[j][0]=tmp;
     }
    for(i=1;i<=n;i++)
    {
     if(sum[i]==0 && dis[i] && !dist[i]){sum[i]=rec(i);}
     else if(dist[i] && sum[i]==0)sum[i]=dist[i]/dis2[i]+1.0/dis[i];
    }
    for(i=1;i<=n;i++)
    if(sum[i]==0)
    {
     k=0;
     for(j=0;j<=n;j++)
     if(a[j][1]==i){sum[i]+=sum[a[j][0]];k++;}
     sum[i]/=k*1.0;
     if(min>sum[i])min=sum[i];
    }
    printf("%.6lf\n",min);
return 0;
}
