#include <iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<map>
#include<set>
#include<stack>
#include<queue>
#include<math.h>
using namespace std;
typedef long long ll;
#define int long long
#define double long double
typedef vector<int> VI;
typedef pair<int, int> pii;
typedef vector<pii> VP;
typedef vector<string> VS;
typedef priority_queue<int> PQ;
template<class T>bool chmax(T &a, const T &b) { if (a < b) { a = b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b < a) { a = b; return 1; } return 0; }
#define fore(i,a) for(auto &i:a)
#define REP(i,n) for(int i=0;i<n;i++)
#define eREP(i,n) for(int i=0;i<=n;i++)
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define eFOR(i,a,b) for(int i=(a);i<=(b);++i)
#define SORT(c) sort((c).begin(),(c).end())
#define rSORT(c) sort((c).rbegin(),(c).rend())
#define LB(x,a) lower_bound((x).begin(),(x).end(),(a))
#define UB(x,a) upper_bound((x).begin(),(x).end(),(a))
#define INF 1000000000
#define LLINF 9223372036854775807
#define mod 1000000007
#define eps 1e-12 
//priority_queue<int,vector<int>, greater<int> > q2;
int N;
int G[300][300];

void warshall() {
	REP(i, N + 2) {
		REP(j, N + 2) {
			REP(k, N + 2) {
				G[j][k] = min(G[j][k], G[j][i] + G[i][k]);
			}
		}
	}
}


string solve(int M) {
	cin >> N;

	VI D(N);
	REP(i, N)cin >> D[i];
	queue<int>Q;
	vector<bool>F(N + 1, false);
	F[0] = 1;
	Q.push(0);
	while (!Q.empty()) {
		int from = Q.front(); Q.pop();
		eFOR(i, 1, M) {
			int to = from + i;
			if (to > N + 1)break;
			if (to == N + 1) {
				//G[from].push_back(to);
				G[from][to] = 1;
			}
			else {
				to += D[to - 1];
				if (to < 0)to = 0;
				if (to > N + 1)to = N + 1;
				//if (from != to) {
					//G[from].push_back(to);
					//cout << from << " " << to << endl;
					G[from][to] = 1;
					if (!F[to]) {
						F[to] = 1;
						Q.push(to);
					}
				//}
			}
		}
	}
	warshall();
	eREP(i, N) {
		//cout << i + 1 << " " << G[0][i + 1] << " " << G[i + 1][N + 1] << endl;
		if (G[0][i] != INF && G[i][N + 1] == INF) {
			//cout << i + 1 << endl;
			return "NG";
		}
	}
	return "OK";
}

signed main() {
	cin.tie(0);
	ios::sync_with_stdio(false);
	
	int M = 1;
	while (M) {
		REP(i, 300)REP(j, 300)G[i][j] = INF;
		cin >> M;
		if (!M)return 0;
		cout << solve(M) << '\n';
	}

	return 0;
}


