Код из задачи
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<String>list1 =  new ArrayList<String>();
        int N = Integer.parseInt(reader.readLine());
        int M = Integer.parseInt(reader.readLine());

        for(int i=0; i<N; i++){
            list1.add(reader.readLine());
        }

        for(int i=0; i<M; i++){
            list1.add(list1.get(0));
            list1.remove(0);
        }
Объясните, что делает этот участок , а именно:
for(int i=0; i<M; i++){
            list1.add(list1.get(0));
            list1.remove(0);
        }
Он как бы добавляет элемент с нулевым индексом, а потом удаляет его ? Это решило задачу, но я не понимаю, каким образом этот участок выполняет условие задачи: Переставить M первых строк в конец списка. Каким образом происходит переставление ??