/*
这个题需要同时访问最大和最小值,并把最小值加上一个输入的数。然后重复找最大最小值。
我最开始用的PriorityQueue,但是发现访问最小值之后没法直接访问最大值。
之后想用双端优先的TreeSet,跑案例的时候发现过去不全部的,
查了查才知道,TreeSet的直接把相同的元素合并了。
然后我又用回来了,加了一个max变量做最大值记录。
 */
import java.util.*;
import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter pw = new PrintWriter(System.out);
        StreamTokenizer st = new StreamTokenizer(br);
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        st.nextToken();
        int N = (int)st.nval;
        st.nextToken();
        int M = (int)st.nval;
        int max = Integer.MIN_VALUE;
        while (N-- > 0) {
            st.nextToken();
            int temp = (int)st.nval;
            pq.add(temp);
            if (temp > max) {
                max = temp;
            }
        }
        while (M-- > 0) {
            int temp = pq.poll();
            st.nextToken();
            int temp_new = temp + (int)st.nval;
            pq.add(temp_new);
            if (temp_new > max) {
                max = temp_new;
            }
            pw.println(max);
        }
        pw.flush();
    }
}