#include<bits/stdc++.h>
#define maxn 100005
using namespace std;
map<int,bool>cb[maxn];
int n,m,a[maxn],dfn[maxn],low[maxn],iwc[maxn],wa[maxn],out[maxn],dp[maxn],cnt=1,tot=1,sm;
vector<int>mp[maxn],mp2[maxn];
bool stac[maxn],qd=0;
stack<int>s;
void dfs(int now){
dfn[now]=low[now]=cnt++;
stac[now]=1;
s.push(now);
for(int o=0;o<mp[now].size();o++){
if(!dfn[mp[now][o]]){
dfs(mp[now][o]);
low[now]=min(low[now],low[mp[now][o]]);
}
else if(stac[mp[now][o]]){
low[now]=min(low[now],low[mp[now][o]]);
}
}
if(dfn[now]==low[now]){
int k;
do{
k=s.top();s.pop();
iwc[k]=tot;
stac[k]=0;
wa[tot]+=a[k];
}while(now!=k);
tot++;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
a[i]=1;
}
while(m--){
int nw,nt;
cin>>nw>>nt;
mp[nw].push_back(nt);
}
for(int i=1;i<=n;i++){
if(!dfn[i]){
dfs(i);
}
}
for(int i=1;i<=n;i++){
for(int o=0;o<mp[i].size();o++){
if(iwc[i]!=iwc[mp[i][o]]&&cb[iwc[i]][iwc[mp[i][o]]]==0){
mp2[iwc[i]].push_back(iwc[mp[i][o]]);
out[iwc[mp[i][o]]]++;
cb[iwc[i]][iwc[mp[i][o]]]=1;
}
}
}
tot--;
for(int ni=1;ni<=tot;ni++){
if(!out[ni]){
sm++;
if(a[ni]==1){
bool cdi=1;
for(int o=0;o<mp2[ni].size();o++){
cdi&=(out[mp2[ni][o]]>=2);
}
qd|=cdi;
}
}
}
printf("%.6lf",((double)(n-sm+qd)/(double)n));
return 0;
}