Imprimir matriz deslocada para a esquerda

Boa tarde pessoal… Eu preciso fazer um programa que receba uma matriz mxn e retorne o resultado deslocado para a esquerda. Por exemplo:
matriz 3x3:
1 2 3
4 5 6
7 8 9
Teria como resultado:
2 3 1
5 6 4
8 9 7

Meu programa roda até a parte de fazer a leitura dos números,depois ele dá o seguinte erro:
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3
at eex3l1.Main.main(Main.java:33)
Java Result: 1

Aqui está a parte que eu fiz,fiz tudo no método main pq primeiro eu quero saber se minha lógica está certa pra dar continuidade pra depois deixar bonitinho:

[code]import java.util.Scanner;
public class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    Scanner tec=new Scanner(System.in);
    int m,n;
    int m1[][],m2[][];
    System.out.println("Informe o numero de linhas da matriz: ");
    m=tec.nextInt();
    System.out.println("Informe o numero de colunas da matriz: ");
    n=tec.nextInt();
    m1=new int[m][n];
    m2=new int[m][n];
    //leitura da matriz original
    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
            m1[i][j]=tec.nextInt();
    //passando os valores trocados para a matriz 2. Aqui que dá pau...
    for(int j=0;j<n-1;j++)
        for(int i=0;i<m;i++)
            m2[i][j]=m1[i+1][j+1];
    for(int i=0;i<m;i++)
        m2[i][n-1]=m1[i][0];
   //imprime resultados
    System.out.println("Matriz normal: ");
    for (int i=0;i<m;i++){
        for(int j=0;j<n;j++)
            System.out.print(m1[i][j]);
        System.out.println(" ");
    }
    System.out.println("Matriz Resultado");
    for (int i=0;i<m;i++){
        for(int j=0;j<n;j++)
            System.out.print(m1[i][j]);
        System.out.println(" ");
    }

}

}[/code]

Não seria melhor você, em vez de usar a variável m, usar a variável que contém a matriz. Você pode usar a variável m1 e m2, seguidas do método length().