#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;

typedef long long ll;

#define pb push_back

int main(){
	while(1){
		int max;
		int n,d[252];
		scanf("%d",&max); if(max == 0)break;
		scanf("%d",&n);
		for(int i = 1 ; i <= n ; i ++){
			scanf("%d",&d[i]);
		}
		vector<int> G[252];
		vector<int> rG[252];
		for(int i = 0 ; i < n+1 ; i ++){
			for(int j = 1 ; j <= max ; j ++){
				if(i+j >= n+1 || i+j+d[i+j] >= n+1){
					G[i].pb(n+1);
					rG[n+1].pb(i);
				}
				else if(i+j+d[i+j] >= 0){
					G[i].pb(i+j+d[i+j]);
					rG[i+j+d[i+j]].pb(i);
				}
				else {
					G[i].pb(0);
					rG[0].pb(i);
				}
			}
		}
		bool used[252];
		queue<int> que;
		for(int i = 0 ; i < 252 ; i ++){
			used[i] = false;
			que.push(0);
		}
		while(!que.empty()){
			int p = que.front(); que.pop();
			if(used[p])continue;
			used[p] = true;
			for(int i = 0 ; i < G[p].size() ; i ++){
				que.push(G[p][i]);
			}
		}
		bool used_[252];
		queue<int> que_;
		for(int i = 0 ; i < 252 ; i ++){
			used_[i] = false;
			que_.push(n+1);
		}
		while(!que_.empty()){
			int p = que_.front(); que_.pop();
			if(used_[p])continue;
			used_[p] = true;
			for(int i = 0 ; i < rG[p].size() ; i ++){
				que_.push(rG[p][i]);
			}
		}
		bool t = true;
		for(int i = 0 ; i < 252 ; i ++){
			if(used[i] && !used_[i])t = false;
		}
		if(t)puts("OK");
		else puts("NG");
		/*for(int i = 0 ; i <= n+1 ; i ++){
			printf("G[%d]:",i);
			for(int j = 0 ; j < G[i].size() ; j ++){
				printf("%d ",G[i][j]);
			}
			puts("");
			printf("rG[%d]:",i);
			for(int j = 0 ; j < rG[i].size() ; j ++){
				printf("%d ",rG[i][j]);
			}
			puts("");
		}*/
	}
}