#include
#include
#include
#include
#include
using namespace std;
vectorgraph[100005];
vectorrev_graph[100005];
bool visited[100005];
int n, m;
int niza[100005];
int idx;
stacks;
void dfs(int node){
visited[node]=true;
for(int i=0; i>m>>n;
for(int i=0; i>a>>b;
graph[a].push_back(b);
rev_graph[b].push_back(a);
}
memset(visited, false, sizeof visited);
for(int i=1; i<=m; i++){
if(!visited[i]){
dfs(i);
}
}
int br_kingdoms=0;
memset(visited, false, sizeof visited);
while(!s.empty()){
int node=s.top();
if(!visited[node]){
rev_dfs(node);
idx++;
br_kingdoms++;
// cout<