Perché in questo codice il metodo m e la variabile x devono essere necessariamente static? non dovrebbe essere una scelta totalmente arbitraria?

codice:
public class B {
private static int x = 1;
static final void m(int i) {
i++; x++;
}
public static void main(String[] args){
int y = 1;
m(y);
System.out.println(x + " " + y);
}
}
basta che tolgo lo static da una sola tra x ed m e il codice non funziona. Non riesco a spiegarmelo