```python
def dur_hours(minutes: int) -> int:
    """Return the whole hours in a count of minutes, discarding what is left over."""
    if minutes < 0:
        raise ValueError("minutes must be non-negative")
    return minutes // 60


def dur_text(minutes: int) -> str:
    """Write the count as hours and minutes joined, like 1h30m."""
    if minutes < 0:
        raise ValueError("minutes must be non-negative")
    
    hours = minutes // 60
    remaining_minutes = minutes % 60
    
    if minutes == 0:
        return "0m"
    elif hours == 0:
        return f"{remaining_minutes}m"
    elif remaining_minutes == 0:
        return f"{hours}h"
    else:
        return f"{hours}h{remaining_minutes}m"
```