n, m = map(int, input().split())
g = [[] for _ in range(n)]
for _ in range(m):
u, v = map(int, input().split())
u -= 1
v -= 1
g[u].append(v)
g[v].append(u)
used = [False] * n
components = 0
trees = 0
for start in range(n):
if used[start]:
continue
components += 1
stack = [start]
used[start] = True
vertices = 0
degree_sum = 0
while stack:
v = stack.pop()
vertices += 1
degree_sum += len(g[v])
for to in g[v]:
if not used[to]:
used[to] = True
stack.append(to)
edges = degree_sum // 2
if edges == vertices - 1:
trees += 1
print(components, trees)
n, k = map(int, input().split())
left = 0
right = n
while left < right:
mid = (left + right + 1) // 2
if mid * (mid + 1) // 2 <= k:
left = mid
else:
right = mid - 1
print(left)