#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int sum,n,m,dfn[N],col[N],vis[N],cnt,low[N],degree[N];
vector<int>G[N];
stack<int>st;
void tarjan(int u)
{
dfn[u]=low[u]=++cnt;
vis[u]=1;
st.push(u);
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(!dfn[v]) tarjan(v),low[u]=min(low[u],low[v]);
else if(vis[v]) low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u])
{
int v=u;
++sum;
do
{
v=st.top();
vis[v]=0;
col[v]=sum;
st.pop();
}while(u!=v);
}
}
int main()
{
cin>>n>>m;
for(int i=1,u,v;i<=m;i++){
cin>>u>>v;
G[u].push_back(v);
}
for(int i=1;i<=n;i++){
if(!dfn[i]){
tarjan(i);
}
}
}