Загрузка данных


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)