#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll n,m,k,cnt,u,v;
vector<bool> vis;
vector<ll> a;
vector<vector<ll>> adj;
bool find_edge(ll u,ll v)
{
for(ll i=0;i<adj[u].size();++i)
if(adj[u][i]==v)
return 1;
return 0;
}
void dfs(ll u)
{
if(vis[u]) return ;
vis[u]=1,++cnt;
for(ll i=0;i<adj[u].size();++i) dfs(adj[u][i]);
}
int main()
{
scanf("%lld%lld",&n,&m);
vis.resize(n+1);
adj.resize(n+1);
a.resize(n+1);
for(ll i=1;i<=m;++i)
{
scanf("%lld%lld",&u,&v);
adj[u].push_back(v);
}
for(ll i=1;i<=n;++i)
{
if(!vis[i]) dfs(i);
k+=cnt/2,cnt=0;
}
printf("%lld %lld\n",min(k,n-k),max(k,n-k));
return 0;
}