SQL does exactly what one should expect. It returns the high value for that type. You think of numeric sorting, but while using string you got string sorting.
You may remove the leading 'S' and let SQL do a numeric sorting...
SELECT MAX(CAST(REPLACE(RECEIPT_NO, 'S', '') AS INT)) ...