Typhoon Soudelor kills at least 21 in China and Taiwan