При любом вводе, если M <= N, все работает нормально. Идея простая - во втором обходе идем с конца и вписываем на место st[ N - 1 - i ] (это i-й элемент с конца) элемент st[ M - 1 - i ] (нулевой с конца, то есть последний в списке, получает значение (M-1)-го, и т.д.