import sys
def main():
data = sys.stdin.read().split()
n, m = int(data[0]), int(data[1])
parent = list(range(n + 1))
def find(x):
while parent[x] != x:
parent[x] = parent[parent[x]]
x = parent[x]
return x
edges = []
idx = 2
for _ in range(m):
if idx + 1 >= len(data):
break
u, v = int(data[idx]), int(data[idx + 1])
idx += 2
edges.append(u)
ru, rv = find(u), find(v)
if ru != rv:
parent[ru] = rv
verts = {}
ecount = {}
for v in range(1, n + 1):
r = find(v)
verts[r] = verts.get(r, 0) + 1
for u in edges:
r = find(u)
ecount[r] = ecount.get(r, 0) + 1
a = len(verts)
b = sum(1 for r, cnt in verts.items() if ecount.get(r, 0) == cnt - 1)
print(a, b)
main()