class Input_kyopro:
    def II(self): return int(input())
    def MI(self): return map(int,input().split())
    def MS(self): return map(str,input().split())
    def LMI(self): return list(self.MI())
    def LMS(self): return list(self.MS())
    def LLI(self,N): return [self.LMI() for _ in range(N)]
    def LLS(self,N): return [self.LMS() for _ in range(N)]
    def LS(self,N): return [input() for _ in range(N)]
    def LSL(self,N): return [list(input()) for _ in range(N)]
    def LI(self,N): return [self.II() for _ in range(N)]
I=Input_kyopro()
#入力
N,X=I.MI()
ab=I.LLI(N)
ruiseki=[0]*(X+1)
for a,b in ab:
    count=b-1
    for i in range(a-1,max(-1,a-b),-1):
        ruiseki[i]=max(ruiseki[i],count)
        count-=1
    count=b
    for i in range(a,min(X+1,a+b+1)):
        ruiseki[i]=max(ruiseki[i],count)
        count-=1
print(*ruiseki[1:])