import std; void main () { /* シミュる */ int N, X; readln.read(N, X); int[] light = new int[](X+1); light[] = 0; foreach (i; 0..N) { int A, B; readln.read(A, B); int level = B; foreach (x; 0..B) { if (0 <= A-x) light[A-x] = max(light[A-x], level - x); if (A+x <= X) light[A+x] = max(light[A+x], level - x); } } foreach (i, l; light[1..$]) { write(l, i == light.length-2 ? '\n' : ' '); } } void read (T...) (string S, ref T args) { auto buf = S.split; foreach (i, ref arg; args) { arg = buf[i].to!(typeof(arg)); } }