from heapq import nlargest N, D = map(int, input().split()) PQs = [tuple(map(int, input().split())) for _ in range(N)] # dp[最後の料理] = 元気度 # 元気度の下界を二分探索 # new_dp[料理] = max dp[他の料理] + 差分 (下界に違反しない場合) INF = 10 ** 9 def isok(lb): dp = [0] * N for _ in range(D): new_dp = [-INF] * N M1, M2 = nlargest(2, dp) if M1 == -INF: return False for i, (P, Q) in enumerate(PQs): M = M1 if (M1 != dp[i]) else M2 if M - P >= lb: new_dp[i] = M - P + Q dp = new_dp return max(dp) > -INF ok = -INF ng = 1 while ng - ok > 1: mid = (ng + ok) // 2 if isok(mid): ok = mid else: ng = mid print(ok)