import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class MEXMaximizing {
    static class FastReader
        {
            BufferedReader br;
            StringTokenizer st;

            public FastReader()
            {
                br = new BufferedReader(new
                        InputStreamReader(System.in));
            }

            String next()
            {
                while (st == null || !st.hasMoreElements())
                {
                    try
                    {
                        st = new StringTokenizer(br.readLine());
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                }
                return st.nextToken();
            }

            int nextInt()
            {
                return Integer.parseInt(next());
            }

            long nextLong()
            {
                return Long.parseLong(next());
            }

            double nextDouble()
            {
                return Double.parseDouble(next());
            }

            String nextLine()
            {
                String str = "";
                try
                {
                    str = br.readLine();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
                return str;
            }
        }

    public static void main(String[] args) {
        FastReader s = new FastReader() ;
        int q = s.nextInt() ;
        int x = s.nextInt() ;
        int[] modfrequency = new int[x + 1] ;
        int mex = 0 ;
        for(int i = 0 ; i < q ; i++){
            int p = s.nextInt() ;
            modfrequency[p % x]++ ;
           while(modfrequency[mex % x] > 0){
               modfrequency[mex % x]-- ;
               mex++ ;
           }
           System.out.println(mex) ;
        }
    }
}
