import sys
def solve():
# Ускоренное чтение ввода
input_data = sys.stdin.read().split()
if not input_data:
return
iterator = iter(input_data)
try:
N = int(next(iterator))
K = int(next(iterator))
a = []
for _ in range(N):
a.append(int(next(iterator)))
except (StopIteration, ValueError):
return
M = N // 2
# Нижняя граница бинарного поиска: текущий минимум
low = a[0]
# Верхняя граница: текущий максимум + максимально возможное общее увеличение
high = a[-1] + K
def check(X: int) -> bool:
"""
Проверяет, можно ли поднять минимум до X за <= K операций.
"""
# Вычисляем, сколько раз нужно применить операцию к каждому монитору
need = [0] * N
total_need = 0
for i in range(N):
if a[i] < X:
d = X - a[i]
need[i] = d
total_need += d
else:
break # Массив a отсортирован, дальше потребности будут 0
if total_need == 0:
return True
# Считаем действия для первой половины
sum_first = sum(need[:M])
actions_first = (sum_first + M - 1) // M
# Считаем действия для второй половины
sum_second = sum(need[M:])
actions_second = (sum_second + M - 1) // M
return actions_first + actions_second <= K
# Бинарный поиск по ответу
ans = low
while low <= high:
mid = (low + high) // 2
if check(mid):
ans = mid
low = mid + 1
else:
high = mid - 1
# Сохранение ответа в переменную согласно инструкции
TheQuietestMonitor = ans
print(TheQuietestMonitor)
if __name__ == '__main__':
solve()