While the answer about uploadReadAheadSize may well work for some, I was helping folks for whom it did NOT help: they were trying to upload a 30m file, and even raising that uploadReadAheadSize (at the server level) from its default of 50k (49152) to 50m (adding 3 0's) did not stop the 413 error. (I confirmed there was not a lower-level setting overriding the server-level settings.)
So I proposed instead that they change the Request Filtering feature for "Maximum allowed content length (Bytes)" from its default of 30m (30 000 000) to 40m, and now the upload worked!
The easiest way to set this is in the IIS UI, go to Request Filtering, then on the right choose "Edit Feature Settings", to see that setting. Or if you may want to look for or edit in web.config or applicationhost.config, the setting is ultimately within these xml entries (beware you may not be able just "drop this in", of course), and I show setting it to 40m. You should choose a value to suit your needs:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="40000000" />
</requestFiltering>
</security>
</system.webServer>
BTW, I tried to put that in the "code" feature of this editor, but it kept dropping all but the first line of the XML, so I have dropped it in as text.