codice:
#include <stdio.h>
#define SIZE 2

int main()  {
int m[SIZE][SIZE];
int i,j,k;

printf("enter any integer between 1 and 21");
for (i=0;i<SIZE;i++) {
   for (j=0;j<SIZE;j++) {
      printf("/>");
      scanf("%d",&k);
      while(k<1||k>21){
         printf ("your value is not correct\n\n enter any integer between 1 and 21 ");
         printf ("/>");
         scanf("%d",&k);
      }
      m[i][j]=k;
   }
}

for (i=0;i<SIZE;i++) 
   for (j=0;j<SIZE;j++) 
      printf("%d ", m[i][j]);

system ("PAUSE");

return 0;
}
In pratica arricchisci una matrice bidimensionale e la stampi a video... il tuo problema è che l'istruzione di assegnamento m[i][j]=k; stava dentro il ciclo while di controllo, quindi arricchiva il vettore solo nel caso i valori venissero digitati errati la prima volta... diciamo che andava anche bene metterla all'interno del ciclo, però l'importante è che ci fosse (anche) fuori da quest'ultimo per il motivo sopracitato.

Secondo errore la stampa dei valori a video... i due indici devono andare da 0 a <SIZE, non <=
I vettori sono sì di due elementi, ma il loro conteggio parte da 0, quindi 0 e 1, due elementi in tutto.

Mi sono spiegato bene?

edit: ah, magari se usassi un'indentazione decente ci capiresti qualcosa in più tu stesso...