```python
def short_num(value: int) -> str:
    if value == 0:
        return "0"
    
    units = ["", "", "", "th", "st", "nd"]
    teens = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]
    tens = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
    
    if value < 20:
        return teens[value - 1]
    
    if value < 100:
        return tens[value // 10] + (units[value % 10] if value % 10 != 0 else "")
    
    if value < 1_000:
        return f"{tens[value // 10]}{units[value % 10]}" if value % 10 != 0 else tens[value // 10]
    
    units_million = ["", "m"]
    value_million = value // 1_000_000
    return f"{short_num(value_million)} {units_million[0]} million"
```