要素数5のソート済みの配列 {1,2,4,5,7},{8,9,11,13,17} を
要素数10のソート済みの配列 {1,2,4,5,7,8,9,11,13,17} としたいため、
以下のようなコードを考えました。

public static void main(String[] args) {

    int[] a = { 1, 2, 4, 5, 7 };
    int[] b = { 8, 9, 11, 13, 17 };
    int[] s = new int[10];

    int i = 0; //配列aのi番目を指定
    int j = 0; //配列bのj番目を指定
    int k = 0; //配列sのk番目を指定

    while ((i < 5) || (j < 5)) {
        if (a[i] < b[j]) {
            s[k] = a[i];
            i++;
        } else {
            s[k] = b[j];
            j++;
        }
        k++;
    }

    while (i < 5) {
        s[k] = a[i];
        i++;
    }

    while (j < 5) {
        s[k] = b[j];
        j++;
    }

    System.out.println(Arrays.toString(s));

}

これを実行したところ、以下のエラーが発生しました。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at mergeSort.MergeSort.main(MergeSort.java:17)

java.lang.ArrayIndexOutOfBoundsExceptionは
配列のインデックスに存在しない要素を指定した時のエラーだと理解していますが、
iもjも配列の要素数である5以内に収まっているように思います。
なぜこのエラーが出るのでしょうか。

ご教授いただければ幸いです。