How to display archive by selecting year and then selecting month

Unfortunately there is no way to nest wp_get_archives to achieve this, so you will have to build your own loop using get_month_link Like this (untested, regard this as a starting point):

$year = 2009; 
while ($year =< get_the_time('Y')) {
  echo '<ul>'
  $month = 1;
  while ($month =< 12) {
    $link = get_month_link ($year, $month);
    if ($link != '') {
      echo '<li>' . $link . '</li>';
      }
    $month = $month + 1;
    }
  echo '</ul>';
  $year = $year + 1;
  }

Beware that get_month_link doesn’t test if there actually are posts to display in that month. So the link will never be empty, unless you use the month_link filter to do that test and in that case return an empty link.

Next you’ll need the css to display this ordered list correctly, but that is not a WP question.

tech