I'm getting run time error for test cases 1 and 2 .. What is wrong in my code?

import java.util.*;
public class Main {
public static void main(String args[]) {

	Scanner sc = new Scanner(System.in);
	int[] primes = new int[1000001];
	soe(primes);

	int[] cumsum = new int[1000001];
	
	for(int i=1 ; i<=1000000 ; i++) {
		cumsum[i] = cumsum[i-1]+primes[i];
	}
	
	int q = sc.nextInt();
	while(q-->0) {
		int a = sc.nextInt();
		int b = sc.nextInt();
		System.out.println(cumsum[b]-cumsum[a-1]);
	}


}

public static void soe(int[] primes) {

	Arrays.fill(primes, 1);

	primes[0] = 0;
	primes[1] = 0;

	for (int table = 2; table * table <= 1000000; table++) {

		int j = 2;
		while (table * j <= 1000000) {
			primes[table * j] = 0;
			j++;
		}

	}

}

}

@LakshmiPrasanna0303,
https://ide.codingblocks.com/s/279070 corrected code.

In case a=0, your code will give an outOfboundsException because cumsum[a-1] will be cumsum[-1] where the index is wrong.

I have added just a small condition to check that.
The condition is:

if(a==0)
   a=1