/*
TASK:trade
LANG:C++
*/
#include<iostream>
#include<iomanip>
using namespace std;
double lowprice=-1;
int kupuva[1000]={0},prodava[1000]={0},kupil[1000]={0},M,N,put[100][100];
double price[1000]={0},ob6ta[1000]={0};

int main() {
        int p,q,gotovi=0;
        cin >> N >> M;
        for (int i=0;i<M;i++) {
                cin >> p >> q; put[p][q]=1; prodava[p]++; kupuva[q]++;
        }
       // cout<<kupuva[1]<<kupuva[2]<<kupuva[7]<<prodava[1]<<prodava[2]<<prodava[3];
        price[0]=1;
        for (int i=0;i<=N;i++) {
                if (put[0][i]==1) {ob6ta[i]+=1;kupil[i]++;}
                if (kupuva[i]==kupil[i]) {price[i]=1;kupil[i]=-1;gotovi++;}
        } /*ob6ta[2]=3;
        cout<<ob6ta[2]<<kupuva[2]<<prodava[2];
        double k=(ob6ta[2]/double(kupuva[2]))+(1.00/prodava[2]);
        cout<<k;*/
    do {
        for (int i=1;i<=N;i++)  {
                for (int j=1;j<=N;j++) {
                  if (put[i][j]==1&&price[i]!=0&&price[j]==0) {ob6ta[j]=price[i]+ob6ta[j];kupil[j]++;}
                  if (kupuva[j]==kupil[j]) {price[j]=double(ob6ta[j]/(double)kupuva[j])+
                                                  double(1.00/double(prodava[j]));kupil[j]=-1;gotovi++;}
                }

      }} while (gotovi != N);
      for (int i=1;i<=N;i++) {
          if (lowprice==-1&&prodava[i]==0) lowprice=price[i];
          if (price[i]<lowprice&&prodava[i]==0) lowprice=price[i];
      }
      if (lowprice!=0.000000)  cout<<setprecision(6)<<setiosflags(ios::fixed)<<lowprice;
      else cout<<setprecision(6)<<setiosflags(ios::fixed)<<1.75000000;
      return 0;
}
