import sys
input=sys.stdin.readline

#区間[L,R]に1を加えていく
def seg_tree_update(L,R):
    L,R=2**m-1+L,2**m-1+R
    while L<R:
        if L%2==0:
            tree[L]+=1
        if R%2==1:
            tree[R]+=1
        L//=2
        R=R//2-1
    if L==R:
        tree[L]+=1

#数直線xでの和を求める
def seg_tree_sumarize(x):
    ind=2**m-1+x
    SUM=0
    while ind>=0:
        SUM+=tree[ind]
        ind=(ind-1)//2
    return SUM

N,M=map(int,input().split())

data=[]

for i in range(N):
    l,r=map(int,input().split())
    data.append([r-l, l, r])

data.sort()

m=0
while pow(2,m)<M+1:
    m+=1
tree=[0]*(pow(2,m+1)-1)

i=0
for d in range(1,M+1):
    
    #間隔の長さがd以下の区間だけ考えれば良い。
    while i<N and data[i][0]<d:
        seg_tree_update(data[i][1],data[i][2])
        i+=1
    
    ans=0
    
    for j in range((M+1)//d+1):
        if d*j>M:
            break
        ans+=seg_tree_sumarize(d*j)
    
    print(ans+N-i)