#include <bits/stdc++.h>
using namespace std;
struct Node
{
int v;
int id;
};
int n,m;
vector<vector<Node>> inp;
vector<int> low, num;
vector<bool> joint;
int times = 0;
int bridge = 0;
void dfs(int u, int par)
{
low[u] = num[u] = ++times;
int child = 0;
for(Node v: inp[u])
{
int x = v.v;
int id = v.id;
if(id == par) continue;
if(num[x] == 0)
{
dfs(x, id);
child++;
low[u] = min(low[u], low[x]);
if(low[x] == num[x]) bridge++;
if(par == -1)
{
if(child > 1) joint[u] = true;
}
else if(low[x] >= num[u]) joint[u] = true;
}
else low[u] = min(low[u], num[x]);
}
}
int main()
{
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n >>m;
inp.resize(n+1);
low.resize(n+1);
num.resize(n+1);
joint.resize(n+1);
for(int i =1; i<=m; i++)
{
int a,b; cin >> a >> b;
inp[a].push_back({b, i});
inp[b].push_back({a, i});
}
for(int i =1; i<=n; i++) if(num[i] == 0) dfs(i, -1);
int khop =0;
for(int i =1; i<=n; i++) khop += joint[i];
cout << khop << " " << bridge;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBOb2RlCnsKCWludCB2OwoJaW50IGlkOwp9OwppbnQgbixtOwp2ZWN0b3I8dmVjdG9yPE5vZGU+PiBpbnA7CnZlY3RvcjxpbnQ+IGxvdywgbnVtOwp2ZWN0b3I8Ym9vbD4gam9pbnQ7CmludCB0aW1lcyA9IDA7CmludCBicmlkZ2UgPSAwOwoKCgp2b2lkIGRmcyhpbnQgdSwgaW50IHBhcikKewoJbG93W3VdID0gbnVtW3VdID0gKyt0aW1lczsKCWludCBjaGlsZCA9IDA7Cglmb3IoTm9kZSB2OiBpbnBbdV0pCgl7CgkJaW50IHggPSB2LnY7CgkJaW50IGlkID0gdi5pZDsKCQlpZihpZCA9PSBwYXIpIGNvbnRpbnVlOwoJCWlmKG51bVt4XSA9PSAwKQoJCXsKCQkJZGZzKHgsIGlkKTsKCQkJY2hpbGQrKzsKCQkJbG93W3VdID0gbWluKGxvd1t1XSwgbG93W3hdKTsKCQkJaWYobG93W3hdID09IG51bVt4XSkgYnJpZGdlKys7CgkJCWlmKHBhciA9PSAtMSkKCQkJewoJCQkJaWYoY2hpbGQgPiAxKSBqb2ludFt1XSA9IHRydWU7CgkJCX0KCQkJZWxzZSBpZihsb3dbeF0gPj0gbnVtW3VdKSBqb2ludFt1XSA9IHRydWU7CgkJfQoJCWVsc2UgbG93W3VdID0gbWluKGxvd1t1XSwgbnVtW3hdKTsKCX0KfQppbnQgbWFpbigpCnsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCk7CgljaW4gPj4gbiA+Pm07CglpbnAucmVzaXplKG4rMSk7Cglsb3cucmVzaXplKG4rMSk7CgludW0ucmVzaXplKG4rMSk7Cglqb2ludC5yZXNpemUobisxKTsKCWZvcihpbnQgIGkgPTE7IGk8PW07IGkrKykgCgl7CgkJaW50IGEsYjsgY2luID4+IGEgPj4gYjsKCQlpbnBbYV0ucHVzaF9iYWNrKHtiLCBpfSk7CgkJaW5wW2JdLnB1c2hfYmFjayh7YSwgaX0pOwoJfQoJCglmb3IoaW50IGkgPTE7IGk8PW47IGkrKykgaWYobnVtW2ldID09IDApIGRmcyhpLCAtMSk7CgkKCWludCBraG9wID0wOwoJZm9yKGludCBpID0xOyBpPD1uOyBpKyspIGtob3AgKz0gam9pbnRbaV07CgkKCWNvdXQgPDwga2hvcCA8PCAiICIgPDwgYnJpZGdlOwoJCgkKCQoJcmV0dXJuIDA7Cn0=