Помогите, пожалуйста, разобраться. Запутался совсем с этим циклом и не могу понять логику данного кода. Понимаю, что 18ая строка отвечает за строчки в таблице умножения, а 21ая строка за столбцы. На этом моё понимание заканчивается. Помогите, пожалуйста, понять как образуется таблица умножения в данном коде. Заранее благодарю за любую помощь.
import java.io.*;

public class Solution {
    public static void main(String[] args) throws Exception {

        int a = 1;
        while (a <= 10){

            int b = 1;
            while (b < 10){
                System.out.print(a * b + " ");
                b++;
            }
            System.out.println(a * b);
            a++;
        }
    }
}