I may be wrong, but when I saw this I immediately thought of Python's range, where the number used is the stop number - i.e., stop before you get to that number. That also fits well with the way loops are typically structured in many other computer languages. So from a programming standpoint, this makes perfect sense.
However, unless (and arguably, even if) your readers are computer programmers, the expectation will be that pages x - y means all pages with numbers >= x and <= y. In addition to examples provided by others, the obvious example to me of why it must be that way is the last page of the book. If a book has 100 pages numbered 1 - 100, and you are referencing information on the last 2 pages, the reference will be 99-100. Referencing 99-101 would clearly not make sense since 101 does not exist. Using Python notation, the reference would be
range(99,101) but it is a lot simpler to say 99-100.
In fact, a program to extract or otherwise process the pages might be something like
extract_pages(x, y) and internally reference
range(x, y+1), so that the user of the function would pass the actual first & last page numbers.
There are good reasons why
range and similar programming constructs use a stop (termination condition) value rather than a last value, but those are computer science discussions and not really relevant here.