It sounds like you should really encapsulate your data better. Any time you have two collections which are always the same size, consider changing to have one collection of some type which composes them.
We can't really tell what your type is meant to represent (hint: use more meaningful names) but if you had a class:
class Foo {
private final int[] a = new int[MU];
private final int[] b = new int[P];
...
}
Then you could have:
Foo[] foos = new Foo[I];
At that point it's very clear how the arrays are structured - you're very unlikely to do the wrong thing, because you'd have a loop such as:
for (int i = 0; i < foos.length; i++) {
Foo foo = foo[i];
// Use foo
}
I'd also encourage you to use the enhanced for loop:
for (Foo foo : foos) {
...
}