import java.util.*; public class D{ static int minMove(int d, int x, int y, int[][] map){ if(d == 10) return Integer.MAX_VALUE; int[] dx={1, 0, -1, 0}, dy={0, 1, 0, -1}; int min = Integer.MAX_VALUE - 1; for(int i = 0; i < 4; i++){ int nx = x + dx[i], ny = y + dy[i]; if(map[nx][ny] == 1) continue; while(map[nx][ny]%2 == 0){ nx += dx[i]; ny += dy[i]; } if(map[nx][ny] == -1) continue; if(map[nx][ny] == 3) return 1; map[nx][ny] = 0; min = Math.min(min, minMove(d + 1, nx - dx[i], ny - dy[i], map)); map[nx][ny] = 1; } return min + 1; } public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); while(true){ int w = sc.nextInt(), h = sc.nextInt(); if(w == 0) break; int sx = 0, sy = 0; int[][] map = new int[h + 2][w + 2]; for(int i = 0; i < h + 2; i++){ for(int j = 0; j < w + 2; j++){ if(i % (h + 1) == 0 || j % (w + 1) == 0) map[i][j] = -1; else map[i][j] = sc.nextInt(); if(map[i][j] == 2){ sx = i; sy = j; } } } int ans = minMove(0, sx, sy, map); System.out.println(ans <= 10 ? ans : -1); } } }